C语言 以下函数为什么会有warning,怎么修正?谢谢 5

char*test(){charch[2];ch[0]='c';ch[1]='\0';returnch;}warning:functionreturnsaddressof... char* test(){
char ch[2];
ch[0] = 'c';
ch[1] = '\0';
return ch;
}
warning: function returns address of local variable [enabled by default]
如果需要实现这样的功能要怎么写?谢谢
展开
 我来答
慎重还可靠灬宝贝f
推荐于2018-05-09 · TA获得超过12.9万个赞
知道大有可为答主
回答量:1.9万
采纳率:52%
帮助的人:2578万
展开全部
有警告的原因:
警告是说返回了local variable(局部变量) 的地址。这是一个很典型的错误。
首先明白:在函数内部定义的变量时在栈上实现的(有时候会通过寄存器实现),一旦函数结束变量的存储单元就会被系统回收。这个函数返回一个栈上的地址,而这个地址再函数结束后就会被用作其他功能,这样在别处使用肯定会出错。

修正方案:
方案一:
char* test(){
static char ch[2];
ch[0] = 'c';
ch[1] = '\0';
return ch;
}
将局部变量变成静态

方案二:
char* test(){
char* ch = new char[2];
ch[0] = 'c';
ch[1] = '\0';
return ch;
}
不过调用后要delete
百度网友42c573d
2012-12-08
知道答主
回答量:2
采纳率:0%
帮助的人:2.8万
展开全部
警告是说返回了local variable(局部变量) 的地址。这是一个很典型的错误。首先明白:在函数内部定义的变量时在栈上实现的(有时候会通过寄存器实现),一旦函数结束变量的存储单元就会被系统回收。这个函数返回一个栈上的地址,而这个地址再函数结束后就会被用作其他功能,这样在别处使用肯定会出错。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
齐霸王在江湖梦
2015-06-29 · TA获得超过3312个赞
知道小有建树答主
回答量:726
采纳率:75%
帮助的人:62.8万
展开全部
警告是说返回了local variable(局部变量) 的地址。这是一个很典型的错误。首先明白:在函数内部定义的变量时在栈上实现的(有时候会通过寄存器实现),一旦函数结束变量的存储单元就会被系统回收。这个函数返回一个栈上的地址,而这个地址再函数结束后就会被用作其他功能,这样在别处使用肯定会出错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友01d3f0d
2012-12-08
知道答主
回答量:7
采纳率:0%
帮助的人:1万
展开全部
最后一个 } 结束后,局部变量生存周期完了

它所占用的地址也不存在了。。
要返回 那个不存在的地址,当然报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chen3511_new
2012-12-08
知道答主
回答量:8
采纳率:0%
帮助的人:8.6万
展开全部
教你一招! 把ch[2]声明为static类型的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式