0

我有一个程序:

    int main()
    {
      int* p_fd = (int*)malloc(2*sizeof(int));
      char buf[100];
      pipe(p_fd);
      write(p_fd[1],"hello", strlen("hello"));
      int n;
      n = read(p_fd[0],buf,100);
      //printf("n is: %d\n",n);                // this line is important!
      buf[n]="\0";                             // this line triggers warning。
      printf("%s\n",buf);
    }

当我编译这个文件时,我总是收到警告:

[esolve@kitty temp]$ gcc -o temp temp.c
temp.c: In function ‘main’:
temp.c:38:9: warning: assignment makes integer from pointer without a cast [enabled by default]

没有这条线printf("n is: %d\n",n); ,结果是:

[esolve@kitty temp]$ ./temp
 hellon

有了这条线,我得到了预期的结果:

    [esolve@kitty temp$ ./temp
    n is: 5
    hello

为什么线路如此重要?谢谢!

4

2 回答 2

5
buf[n]="\0";

应该

buf[n]='\0';

"\0"是一个指向字符串文字的指针,但buf它是一个char数组。这就是为什么警告是关于将指针分配给整数的原因。

您应该只将 a 分配char给 的元素buf。我想你想在你的数组中添加一个空终止符;'\0'是一个char值为 0 的所以提供了这个。

于 2013-05-19T12:55:43.980 回答
0

而不是这个

buf[n]="\0";

buf[n]='\0'; //with single quotes

双引号使它成为字符串,但你想要字符。

于 2013-05-19T12:57:14.243 回答