c - 为什么我收到 'Incompatible pointer type' 警告?

标签 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;
}

返回类型怎么可能是不兼容的类型?谢谢!

最佳答案

你写道:

char * buffer[256];

即 256 个字符指针的数组。

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

char buffer[256];

或者,一个包含 256 个字符的数组(也称为“字符串”:-))

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

关于c - 为什么我收到 'Incompatible pointer type' 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3951106/

相关文章:

c - c代码有什么问题吗?

c - float 数组上的 memset 未将数组完全清零

c - ISO C99 printf ("%Nd"的前导零默认行为)?

计算包含 1 的子集的数量

c - C 结构中的自引用

c - 功能类似于数组中的东西

c - gets() 不起作用

选择要实现的压缩算法

c - 读写函数中的系统调用

c - 如何在读写器多线程程序中设置回调