2010-10-16 146 views
0

我正在通过曲线学习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; 
} 

如何返回类型是不兼容的类型?谢谢!

+0

这已在下面回答。另外我想补充一点,你可能不想返回缓冲区,因为它是全局的,所以它可以被文件中的任何函数(文件作用域)访问。 – steinar 2010-10-16 22:43:02

回答

4

您写道:

char * buffer[256]; 

也就是说,256个字符指针数组。

在我看来,你真正想要的是:

char buffer[256]; 

或者256个字符(也称为“串” :-))

题外话,但相关的数组到你的代码:这不是一个从套接字读取的好方法。机会是,read()在某些时候会返回比您预期的更少的字符。你应该有一些机制来传达你的消息的长度,并且从循环中读取套接字,缓冲字符,直到你得到一个完整的消息。您还应该处理read()返回零(可能断开连接)或发生故障并将errno设置为EINTR(意思是在read内部有信号,并且应该再试一次)的情况。

+0

哎呀..我已经习惯了替代字符串语法。谢谢 – Nick 2010-10-16 22:41:25

+0

读取将不会终止输入数据 - 除非发送的字符串本身是空终止的,并且通过线路发送null。 – 2010-10-16 22:53:24

1

char *buffer[256]声明了一个由256个指针组成的数组 - char。你可能想要char buffer[256]

相关问题