我正在通过曲线学习C,我不明白为什么编译器会报告此警告。
我有一个在全局空间(任何函数之外)声明的char *。我想读取文件描述符并将其内容返回给调用代码。
在文件的顶部,我声明了缓冲区:
char * buffer[256];
这是返回char *
的函数 char * readMessage()
{
int n;
bzero(buffer,256);
n = read(sockfd,buffer,255);
if(n < 0)
error("Error reading from the socket");
return buffer;
}
返回类型如何是不兼容的类型?谢谢!
答案 0 :(得分:4)
您写道:
char * buffer[256];
就是一个包含256个char指针的数组。
在我看来,你真正想要的是:
char buffer[256];
或者,256个字符的数组(也称为'字符串': - ))
偏离主题,但与您的代码相关:这不是从套接字读取的好方法。有可能read()
会在某些时候返回比预期更少的字符。您应该有一些机制来传达消息的长度,并在循环中从套接字读取,缓冲字符,直到您收到完整的消息。您还应该处理read()
返回零(可能断开连接)或失败并将errno
设置为EINTR
的情况(意味着您在read
内有信号而你应该再试一次。)
答案 1 :(得分:1)
char *buffer[256]
声明一个256个指针到char
的数组。您可能需要char buffer[256]
。