为什么我得到'不兼容的指针类型'警告?
我正在通过曲线学习C,我不明白为什么编译器会报告这个警告。为什么我得到'不兼容的指针类型'警告?
我有一个char *在全局空间(任何函数之外)声明。我想读取文件描述符并将其内容返回给调用代码。
在我宣布缓冲区中的文件的顶部:
char * buffer[256];
这是一个返回字符的功能*
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
内部有信号,并且应该再试一次)的情况。
哎呀..我已经习惯了替代字符串语法。谢谢 – Nick 2010-10-16 22:41:25
读取将不会终止输入数据 - 除非发送的字符串本身是空终止的,并且通过线路发送null。 – 2010-10-16 22:53:24
char *buffer[256]
声明了一个由256个指针组成的数组 - char
。你可能想要char buffer[256]
。
这已在下面回答。另外我想补充一点,你可能不想返回缓冲区,因为它是全局的,所以它可以被文件中的任何函数(文件作用域)访问。 – steinar 2010-10-16 22:43:02