c语言函数返回error,C中局部变量错误的函数返回地址

这篇博客探讨了在C语言中如何正确地从函数返回字符串。建议使用动态分配内存或者将目标缓冲区和大小作为参数传递给函数。动态分配内存的方法中,函数内部创建字符串副本,并返回指向它的指针,调用者需负责释放内存。另一种方法是将输出缓冲区和大小作为参数,直接在调用者提供的缓冲区内格式化字符串。对于C++,推荐使用std::string来简化内存管理。
摘要由CSDN通过智能技术生成

你的char数组变量out只存在内部函数体。

当您从函数返回时,out缓冲区的内容将无法再访问,它仅是函数的本地内容。

如果要将函数中的某个字符串返回给调用者,则可以在函数内部动态分配该字符串(例如使用malloc()),并将指向该字符串的指针返回给调用者,例如

char* gen(void)

{

char out[256];

sprintf(out, ...);

/*

*   This does NOT work, since "out" is local to the function.

*

*   return out;

*/

/* Dynamically allocate the string */

char* result = malloc(strlen(out) + 1) /* +1 for terminating NUL */

/* Deep-copy the string from temporary buffer to return value buffer */

strcpy(result, out);

/* Return the pointer to the dynamically allocated buffer */

return result;

/* NOTE: The caller must FREE this memory using free(). */

}

另一个更简单的选择是将out缓冲区指针char*与缓冲区大小一起作为参数传递(以避免缓冲区溢出)。

在这种情况下,您的函数可以将字符串直接格式化为作为参数传递的目标缓冲区:

/* Pass destination buffer pointer and buffer size */

void gen(char* out, size_t out_size)

{

/* Directly write into caller supplied buffer.

* Note: Use a "safe" function like snprintf(), to avoid buffer overruns.

*/

snprintf(out, out_size, ...);

...

}

请注意,您在问题标题中明确指出了“ C”,但添加了[c++]标签。如果你可以使用C ++,以最简单的做法是使用一个字符串类像std::string(并让它管理所有的字符串缓冲区的内存分配/清理)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值