将int连接到char []

时间:2014-10-07 02:34:46

标签: c

我是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);
  }
}

显然这对我有意义,但遗憾的是不是编译器。我怎么写这个更好?

5 个答案:

答案 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)