我正在通过曲线学习 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;
}
返回类型怎么可能是不兼容的类型?谢谢!
最佳答案
你写道:
char * buffer[256];
即 256 个字符指针的数组。
在我看来你真正想要的是:
char buffer[256];
或者,一个包含 256 个字符的数组(也称为“字符串”:-))
题外话,但与您的代码相关:这不是从套接字读取的好方法。很有可能,read()
有时会返回比您预期更少的字符。您应该有某种机制来传达消息的长度,并循环读取套接字,缓冲字符,直到获得完整的消息。您还应该处理 read()
返回零(可能断开连接)或失败并将 errno
设置为 EINTR
的情况(意味着您得到了在 read
中发出信号,你应该再试一次)。
关于c - 为什么我收到 'Incompatible pointer type' 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3951106/