您应该在堆上使用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之前,而不是之后!
编辑结果
你的代码是这样的:
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来自哪里?