我是C的新手(显然),我收到以下错误:
warning: passing argument 2 of ‘strncat’ makes pointer from integer without a cast [enabled by default]
以下是代码:
int main(void)
{
FILE *fp;
int c;
unsigned char file[1024] = "/path/to/file";
unsigned char text[1024] = "SomeText";
fp = fopen(file, "r");
if (fp == NULL)
{
perror("Error opening file");
return(-1);
}
while ((c = fgetc(fp)) != EOF && c != '\n')
{
strncat(text,c,1);
}
}
显然这对我有意义,但遗憾的是不是编译器。我怎么写这个更好?
答案 0 :(得分:2)
整数和表示存储在整数中的值的字符串之间没有隐式转换。您必须手动转换它。
函数itoa
可以为您完成:
int value = 1234;
char tempBuffer[MAX_DIGITS];
itoa(value, tempBuffer, 10);
答案 1 :(得分:2)
strncat
无法将字符附加到字符串,因为它会将字符串附加到字符串。您可以使用c
字符创建一个单字符的字符串,但使用strcat
是一种矫枉过正的做法:您最好制作一个指针,并通过添加字符来附加:
char *p = &text[strlen(text)]; // Start appending at the last position of text
while ((c = fgetc(fp)) != EOF && c != '\n') {
*p++ = c;
if (p == &text[1023]) break;
}
*p = '\0';
添加了循环中的指针检查以处理缓冲区溢出。
答案 2 :(得分:1)
strcat()
连接两个字符串,C字符串是一个终止'\0'
字符的数组。所以这是不匹配的。
但是,strncat()
连接两个字符串,让你设置要复制的最大字符数。所以你可以传递c
的地址,它将被视为只有一个元素的数组。所以你可以尝试这样的事情:
strncat(text, (char*)&c, 1);
否则,您需要一个字符缓冲区来保存这些内容。
答案 3 :(得分:0)
strncat用于连接(C风格)字符串。 text
是一个char [],所以它可以工作,但是c
是一个int,它绝对不是字符串,因此是错误。
答案 4 :(得分:0)
试试这个
strncat(text, &c,1)