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