【问题标题】:passing argument 2 of ‘strcat’ makes pointer from integer without a cast [-Wint-conversion] [duplicate]传递'strcat'的参数2使指针从整数而不进行强制转换[-Wint-conversion] [重复]
【发布时间】:2016-04-20 11:03:58
【问题描述】:

我正在读取一个fifo,然后我尝试用它制作另一个不同格式的数组。 我知道 buf 按预期得到它的值,因为打印出来很好。

char graphic[100];
char buf[100];
read(fd_read,&buf,50);
for(int i=0; i<10; i++){
strcat(graphic, buf[i]); }

给我错误:

传递“strcat”的参数 2 使指针从没有 a 强制转换 [-Wint-conversion]

我在 linux 上使用 eclipse,在 C 上。 ...帮助?

【问题讨论】:

  • 什么是whichCharIsIt?请用实际代码告诉graphic已经初始化好了。
  • 我把它恢复为简单的格式。图形都很好,我检查了
  • strcat(graphic, buf[i]); --> graphic[i] = buf[i]; ?
  • 在发布这些问题之前至少检查一次数据类型。您将完全省去登录 SO 的麻烦...

标签: c fifo strcat


【解决方案1】:

strcat 的签名是:

char *strcat(char *dest, const char *src);

即第二个参数应该是指向以'\0' 结尾的char 数组的指针。在您的情况下,您传递的是一个 character。

您可能只需要:(假设 graphic 在某处初始化)

strcat(graphic, buf); /* Use strncat for limited number of characters */

还要确保string.h 包含在您的程序中。


要自己追加字符,可以只使用赋值而不是使用函数。

/* Append one character (ith character of buf[i] ) */
const size_t len = strlen(graphic);
if(len + 1 >= sizeof graphics) { /* Error handling */ }
else {
  graphic[len] = buf[i];
  graphic[len + 1] = '\0';
}

【讨论】:

  • 所以我应该添加一个新的字符,其中包括 buf[i] + '\0' 然后通过 strcat 将其插入图形数组???
  • 但我需要在 buf 的字符之间插入更多字符,这意味着我有时需要更改它。我确实需要逐字符获取它
  • 在这种情况下,请自己附加字符。
  • 不工作:现在我将检查我的水晶球以读懂你的想法,并了解究竟是什么不工作。
  • 这个if(len + 1 &gt; sizeof graphics) 应该是if(len + 1 &gt;= sizeof graphic),不是吗?
【解决方案2】:

strcat() 的语法:

char *strcat(char *dest, const char *src);

这两个参数应该是字符指针。在您的代码中,buf 是一个字符指针(或数组),但在调用 strcat 的第二个参数中,您没有发送整个数组(buf),因此将其作为字符。

试试这个,这可能符合您的要求:

char graphic[100];
char buf[100];
read(fd_read, &buf, 50);

strcpy(graphic, "");
strncat(graphic, buf, 10); //last parameter tells you how many bytes to append

有关错误的更多信息,请参阅以下链接:

C strcat - warning: passing arg 2 of `strcat' makes pointer from integer without a cast

【讨论】:

  • strcat()ing 到一个未初始化的缓冲区(此处为graphic)调用臭名昭著的未定义行为。
  • @alk,是的。垃圾值将出现在缓冲区数组所附加到的图形数组中。我已经编辑了我的答案以消除这种行为。 :-)
猜你喜欢
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2019-11-02
  • 2019-02-18
相关资源
最近更新 更多