2013-05-19 32 views
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); 
    } 

当我comiple这个文件,我总是得到警告:

[[email protected] 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); 结果:

[[email protected] temp]$ ./temp 
hellon 

用这一行,我得到了预期的结果:

[[email protected] temp$ ./temp 
    n is: 5 
    hello 

为什么这条线太重要了? 谢谢!

回答

5
buf[n]="\0"; 

应该是

buf[n]='\0'; 

"\0"指针到字符串文字但bufchar阵列。这就是为什么警告是关于分配一个指向整数的指针。

您应该只将char指定给buf的元素。我认为你想给你的数组添加一个空终止符; '\0'是一个值为0的char因此提供了这一点。

0

取而代之的是

buf[n]="\0"; 

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

双引号使其字符串,但你想字符。