学习c语言,练习中的一个编译错误?求解

不是simaguo 发布于 2016/02/25 16:24
阅读 283
收藏 0
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

加载中
0
Vedfolnir
Vedfolnir

首先 tmp[len] 这里的确有问题 新标起码也要求 const len = strlen(str);

其次告警提示很明确 返回值是一个局部变量 跳出本函数的作用域 tmp就不知道是什么内容的 可能出现野指针

都是基本知识细节

2
Shazi199
Shazi199
这是警告,不是错误,提示你返回了一个局部变量的地址
1
如比如比
如比如比
变量是有作用域的,参照http://c.biancheng.net/cpp/html/62.html
0
不是simaguo
不是simaguo
网上找了个http://www.linuxidc.com/Linux/2014-07/104736.htm
0
木兰宿莽
木兰宿莽
char tmp[]中的tmp在函数结束时会被弹出栈区,因为这是系统自动管理的。你注释掉的那个是对的,因为堆区是由程序员管理的。
0
轩辕O之风
轩辕O之风
没人发现他这样写有问题吗?char tmp[len];
木兰宿莽
木兰宿莽
我说的就是这个问题
0
巴萨卡
巴萨卡
轩辕 君是对的,c不能这么写,需要手动malloc
返回顶部
顶部