7.7 正确从函数返回字符串

来源:互联网 发布:电脑cmd打开编程 编辑:程序博客网 时间:2024/06/05 16:32

问: 我有个函数,本该返回一个字符串,但当它返回调用者的时候,返回的字符串却是垃圾信息。为什么?

 

答:任何时候,函数返回指针,必须确保它指向的内存已经正确分配了。返回的指针可以是静态分配的,调用者传入的或通过malloc分配的,但决不能是局部(自动)的数组。

换言之,决不能是这样:

 

 

函数返回时,局部变量会被抛弃,返回的指针是无效的(它指向一个已经不存在的数组)。

 

一种解决方案是把返回缓冲区声明为静态,即static char retbuf[20];

本方案并不完美,因为使用静态数据的函数不可重入。而且连续调用这个函数会导致同一个返回缓冲区被覆盖,无法同时保存这些返回值。全局数组类似。

 

另一种解决方案让调用者传入保存结果的空间:

 

 

或更好的方法:

 

 

还有一种方法是使用malloc:

 

这种情况下,调用者必须记住最后释放指针(指向的空间),否则会引起Memory Leak。

原创粉丝点击