use*_*915 9 c++ string stdstring
void changeString(const char* &s){
std::string str(s);
str.replace(0, 5, "Howdy");
s = str.c_str();
}
int main() {
const char *s = "Hello, world!";
changeString(s);
std::cout << s << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它会打印出"你好,世界!" 我认为退出str时会被摧毁changeString.我错过了std::string分配方式的东西吗?
Chr*_*ckl 13
这是不确定的行为,当std::cout << s试图访问该指针,因为当地的析构函数std::string中changeString释放了该指针仍然指向的内存.
您的编译器不需要诊断错误,但可以生成二进制文件,然后可以执行任何操作.
您获得所需输出的事实只是运气不好,因为它让您认为您的代码是正确的.例如,我刚刚在我的机器上编译了你的代码并获得了空输出.它也可能已经崩溃,或者它可能已经完成了其他无关的事情.
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |