开发者社区> 问答> 正文

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

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

展开
收起
爱吃鱼的程序员 2020-06-10 13:51:03 482 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    首先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
    2020-06-10 13:51:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多