我已经测试过这段代码:
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
string s1("a"),s2("b");
const char * s = (s1+s2).c_str();
printf("%s\n",s);
}
它返回“ab”。
据我所知,由于 (s1 +s2)
是一个临时对象,可能会以某种方式消失(我不知道),那么 const char * s
可能指向未定义的内存并可能被转储。
那么像这样使用 .c_str()
安全吗?
最佳答案
在您的示例中不安全。但是在
中是安全的printf("%s\n", (a + b).c_str());
原因是临时值(如 a + b
的结果)在完整表达式的末尾被销毁。在您的示例中, const char *
在包含临时和取消引用的完整表达式中幸存下来是未定义的行为。
“未定义的行为”最糟糕的部分是事情可能无论如何都可以正常工作......(只有当你在包括你 parent 在内的大量观众面前制作演示时,UB 代码才会崩溃;-))
关于c++ - 使用 (str1 + str2).c_str() 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146267/