char* strreverse(char str[]){ int i,j; int len = stringlen(str); //char *tmp; char tmp[len]; //tmp = (char *)calloc(len,sizeof(char)); for(i=0;i<len;i++){ j = len-i-1; tmp[i] = str[j]; } return tmp;//第41行 }
报错如下,什么原因?return tmp;返回的也是一个指向数组tmp第一个元素的指针吧
1.c: In function ‘strreverse’:
1.c:41:2: warning: function returns address of local variable [-Wreturn-local-addr]
return tmp;
^
网上找了个http://www.linuxidc.com/Linux/2014-07/104736.htm
首先tmp[len]这里的确有问题新标起码也要求constlen=strlen(str);
其次告警提示很明确返回值是一个局部变量跳出本函数的作用域tmp就不知道是什么内容的可能出现野指针
都是基本知识细节
这是警告,不是错误,提示你返回了一个局部变量的地址变量是有作用域的,参照http://c.biancheng.net/cpp/html/62.html网上找了个http://www.linuxidc.com/Linux/2014-07/104736.htmchartmp[]中的tmp在函数结束时会被弹出栈区,因为这是系统自动管理的。你注释掉的那个是对的,因为堆区是由程序员管理的。没人发现他这样写有问题吗?char tmp[len];我说的就是这个问题轩辕君是对的,c不能这么写,需要手动malloc版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。