python return返回值在计算机内的存储形式_从函数返回值中存储char *

博客主要围绕C语言中函数返回动态分配缓冲区展开,介绍了在堆上使用malloc分配缓冲区并返回的方法,给出了示例代码,包括ReadToSerialPort函数和main函数,同时强调代码*bufptr = '\\0';应在return之前,还提出对fd来源的疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

您应该在堆上使用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来自哪里?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值