常量字符串是写在静态内存中的嘛?
char *GetString2(void){ char *p = "hello world"; return p;}
void Test5(void){ char *str = NULL; str = GetString2(); cout<< str << endl;}
函数Test5运行虽然不会出错,但是函数GetString2的设计概念却是错误的。因为GetString2内的“hello world”是常量字符串,位于静态存储区,它在程序生命期内恒定不变。无论什么时候调用GetString2,它返回的始终是同一个“只读”的内存块。
问题点数:5、回复次数:4Top
1 楼liquanle()回复于 2003-12-04 01:16:59 得分 1
我感觉不是静态存储区的。而是只读形式的。Top
2 楼CAT323(CAT323)回复于 2003-12-04 01:22:04 得分 2
我查了书,C++程序设计语言(特别版),书上只是说字符串文字量(也就是常量拉)是静态分配的,让函数直接返回字符串常量是安全的;而且还说保存这个字符串常量的存储区在函数调用之后并不会丢掉;
这里并没有说它是存储在静态存储区,这个不敢肯定;不过应该是分配在静态存储区的;这样才能起到保护作用。
Top
3 楼liquanle()回复于 2003-12-04 01:24:52 得分 1
因为他没有作别的用处呢,所以一直显示的还是这个值。Top
4 楼timepalette(时间调色板)回复于 2003-12-06 15:09:57 得分 1
"hello word" 的确在.rdata段里Top




