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]
如果需要实现这样的功能要怎么写?谢谢 展开
char ch[2];
ch[0] = 'c';
ch[1] = '\0';
return ch;
}
warning: function returns address of local variable [enabled by default]
如果需要实现这样的功能要怎么写?谢谢 展开
5个回答
展开全部
有警告的原因:
警告是说返回了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
警告是说返回了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
展开全部
警告是说返回了local variable(局部变量) 的地址。这是一个很典型的错误。首先明白:在函数内部定义的变量时在栈上实现的(有时候会通过寄存器实现),一旦函数结束变量的存储单元就会被系统回收。这个函数返回一个栈上的地址,而这个地址再函数结束后就会被用作其他功能,这样在别处使用肯定会出错。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
警告是说返回了local variable(局部变量) 的地址。这是一个很典型的错误。首先明白:在函数内部定义的变量时在栈上实现的(有时候会通过寄存器实现),一旦函数结束变量的存储单元就会被系统回收。这个函数返回一个栈上的地址,而这个地址再函数结束后就会被用作其他功能,这样在别处使用肯定会出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后一个 } 结束后,局部变量生存周期完了
它所占用的地址也不存在了。。
要返回 那个不存在的地址,当然报错
它所占用的地址也不存在了。。
要返回 那个不存在的地址,当然报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
教你一招! 把ch[2]声明为static类型的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询