为什么我收到'不兼容的指针类型'警告?

时间:2010-10-16 22:36:21

标签: c

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

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

2 个答案:

答案 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]