首页 新闻 搜索 专区 学院

c++函数调用返回值的问题(返回值类型CString 和返回值是字符数组)

0
[已关闭问题]

定义如下的一个函数

CString    GetName(){

    char name[30];

    strcpy(name, "namevalue");

   return name;

}

经测试可以正常返回.

现有一疑问, 在return name时,压入栈的是字符数组name的地址,还是字符串的值。

如果是字符数组name的地址,在函数外部取返回值时,由于局部变量指向的内存有可能已无效,返回无效的值。

如果是字符串的值,在函数外部每次取返回值时,都会是正确的。

searingdragon的主页 searingdragon | 初学一级 | 园豆:200
提问于:2010-07-21 08:35
< >
分享
其他回答(2)
0

你可以看下CString 的 = 操作符重载,CString 内部维护了一个 char* .

Launcher | 园豆:45045 (高人七级) | 2010-07-21 08:59
0

是字符串的值.函数返回后 char name[30];的空间已被释放,返回的CString是新的空间,放心用吧.

小堆爸 | 园豆:7 (初学一级) | 2010-07-23 12:07
0

return name;并不是返回name,而是隐式掉用了CString的构造函数,构造了一个CString作为返回值。

相当于这么写:return CString(name);

或者更清晰一点:

CString s(name);

return s;

Greatest | 园豆:678 (小虾三级) | 2010-08-03 20:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册