【发布时间】:2019-12-31 02:14:33
【问题描述】:
返回的 &string[0] 与函数 foo 中的 char* 相同
char* foo(){
string str="fsafsdf";
return &str[0];
}
如果上面是合法的,我们可以这样返回一个c风格的字符串
char* foo(){
string str="fsafsdf";
str=str+'\0';
return &str[0];
}
【问题讨论】:
-
“如果上面是合法的” - 它不是。
-
string str是一个由foo作用域的局部变量。它将在foo结束时过期,因此返回对该变量的引用是一个致命缺陷。 -
但是内存是在堆中为字符串@user4581301分配的
-
"在堆中为字符串分配内存",一旦函数退出就会被释放。
-
阅读一本关于 C++ 的好书。
标签: c++