定义如下的一个函数
CString GetName(){
char name[30];
strcpy(name, "namevalue");
return name;
}
经测试可以正常返回.
现有一疑问, 在return name时,压入栈的是字符数组name的地址,还是字符串的值。
如果是字符数组name的地址,在函数外部取返回值时,由于局部变量指向的内存有可能已无效,返回无效的值。
如果是字符串的值,在函数外部每次取返回值时,都会是正确的。
你可以看下CString 的 = 操作符重载,CString 内部维护了一个 char* .
是字符串的值.函数返回后 char name[30];的空间已被释放,返回的CString是新的空间,放心用吧.
return name;并不是返回name,而是隐式掉用了CString的构造函数,构造了一个CString作为返回值。
相当于这么写:return CString(name);
或者更清晰一点:
CString s(name);
return s;