这个函数有什么问题?该如何修改呢?详细点,马上结贴

郑沐洋 2013-09-30 11:01:29
这个函数有什么问题?该如何修改呢?
char *strA()
{
char str[] = "hello worle";
return str;
}
越详细越好
...全文
126 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
顶一下
郑沐洋 2013-09-30
  • 打赏
  • 举报
回复
引用 5 楼 kfrght 的回复:
return 语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。 也就是说你的代码中定义的char*在return结束时会被销毁,但在其被重写之前其内容仍然是正确的,此时你可以正常访问这段内存,但这个内存是不被保护的,在下一刻很可能被修改而指向未知数据。 所以,你不要这样写。
略懂,那我该怎么改?
宝龙哥 2013-09-30
  • 打赏
  • 举报
回复
return 语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。 也就是说你的代码中定义的char*在return结束时会被销毁,但在其被重写之前其内容仍然是正确的,此时你可以正常访问这段内存,但这个内存是不被保护的,在下一刻很可能被修改而指向未知数据。 所以,你不要这样写。
宝龙哥 2013-09-30
  • 打赏
  • 举报
回复
char *不要用于返回值,而是要在外面定义好,在函数中直接操作
zmn0079 2013-09-30
  • 打赏
  • 举报
回复
返回临时变量的地址是不人道的
星際訪客 2013-09-30
  • 打赏
  • 举报
回复
// 此字符串定義通常建議放在外部
char str[] = "hello worle";
char *strA() {
	return str;
}
星際訪客 2013-09-30
  • 打赏
  • 举报
回复
// 多此一舉的函式定義
char *strA() {
	static char str[] = "hello worle";
	return str;
}
宝龙哥 2013-09-30
  • 打赏
  • 举报
回复
按照start8588 的代码就可以了 char str[] = "hello worle"; char *strA() { return str; } 就是说把char定义在一个不容易销毁的地方,通常放在函数外面就可以了,在被销毁之前char *指向的内存将一直被保护,系统不会把其它内容写到这个内存里,而只有你用代码修改它,这样char *指向的数据就一直正确

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧