关于C中字符串指针函数返回值

 我来答
姬昊焱丙洽
2019-07-31 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:33%
帮助的人:929万
展开全部
一般情况下会输出anggge
但如果运行的程序很多,可能会输出乱码
原因在于char
a[]后a是作为一个局部数组变量由系统自动分配的内存,在ge函数执行结束后将a的首地址返回调用者,但a的内存空间已经释放掉了,但其中的内容并不会立刻清空或被填入其它内容。所以一般情况下main的printf以%s的格式输出从ge返回的指针开始的字符串时,可以正确输出原来字符串,但如果同时运行的程序较多,可能很快就在a原来的内存空间中填入数据,这样就极可能输出乱码,同时由于%s是遇到'\0'才停止,所以输出的长度不能确定。
所以要返回指针,一般要求该指针指向的内存是在外部或者内部手动分配的,也就是由malloc之类的内存函数分配获得的,同时在手动分配的内存使用完毕之后要及时释放,否则可能造成内存泄露
戚星睿霍智
2019-07-14 · TA获得超过3.1万个赞
知道大有可为答主
回答量:1.2万
采纳率:32%
帮助的人:679万
展开全部
在ge函数中定义的a数组其存储类型为auto类的,而ge函数一旦执行完毕后其内存空间就会被释放,其中定义的变量除了static类型的也全部被释放,因此调用ge时分配内存空间存放了a这个字符串,一旦函数调用结束返回后a数组就会被释放,最终无法printf出正确的结果
可以在char
a前面加上static关键字这样其内存不会被释放掉可以正常输出
对于局部变量的指针一定要小心使用,切记静态局部变量的指针可以使用而动态的不可以用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式