Вы должны выделить буфер в куче с malloc
и вернуть его. Пользователи вашей функции будут нести ответственность за освобождение памяти (и ваша документация должна четко указывать это!)
Простое изменение будет
char* buffer = (char*)malloc(256);
// beware that now `sizeof(buffer)` will be not 256 any more, but 4, so
// you have to define your constant for it.
...
if (nbytes) return buffer;
free(buffer);
return 0;
...
int main(int argc, char *argv[])
{
char *letter = ReadToSerialPort();
if (letter)
{
printf("Response is %s\n", letter);
free(letter);
return 0;
}
return 1;
}
Обратите внимание, что код *bufptr = '\0';
должен быть до return
, а не после!
EDIT
Ваш код выглядит так:
char *ReadToSerialPort()
{
const int buffer_size = 256;
char *buffer = (char *)malloc(buffer_size);
char *bufptr = buffer;
int nbytes;
while ((nbytes = read(fd, bufptr, buffer+buffer_size-bufptr-1)) > 0)
{
bufptr += nbytes;
}
*bufptr = '\0';
if (bufptr != buffer)
return bufptr;
// else cleaning up
free(buffer);
return 0;
}
Мне любопытно, откуда взялась fd