Почему я получаю предупреждение «Несовместимый тип указателя»? - PullRequest
0 голосов
/ 17 октября 2010

Я работаю по кривой, чтобы узнать C, и я не понимаю, почему компилятор сообщает об этом предупреждении.

У меня есть символ *, который объявлен в глобальном пространстве (вне какой-либо функции). Я хочу прочитать дескриптор файла и вернуть его содержимое в вызывающий код.

В верхней части файла у меня объявлен буфер:

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

Как тип возвращаемого значения может быть несовместимого типа? Спасибо!

Ответы [ 2 ]

4 голосов
/ 17 октября 2010

Вы писали:

char * buffer[256];

То есть массив из 256 символьных указателей.

Мне кажется, что вы действительно хотите:

char buffer[256];

Или массив из 256 символов (также известный как «строка»: -))

Не по теме, но связанный с вашим кодом: это не очень хороший способ чтения из сокета.Скорее всего, read() в какой-то момент вернет меньше символов, чем вы ожидаете.У вас должен быть какой-то механизм для передачи длины ваших сообщений и чтения из сокета в цикле, буферизуя символы, пока вы не получите полное сообщение.Вы должны также обработать случай, когда read() возвращает ноль (вероятнее всего, отключение) или когда он не работает и устанавливает errno на EINTR (что означает, что вы получили сигнал, находясь внутри read, и вам следует повторить попытку).

1 голос
/ 17 октября 2010

char *buffer[256] объявляет массив из 256 указателей на char. Вы, вероятно, хотите char buffer[256].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...