C++ 串联字符串上的c_str()是否安全?
我知道字符串文本是静态分配的。但是下面的字符串连接也可以安全使用吗C++ 串联字符串上的c_str()是否安全?,c++,string,std,c-strings,C++,String,Std,C Strings,我知道字符串文本是静态分配的。但是下面的字符串连接也可以安全使用吗 void someFunction(std::string& foo) { functionTakingCString(("start " + foo + " end").c_str()); } 后续问题:如评论中所述,当functionTakingCString存储该指针时,这确实是不安全的。在这种情况下,以下内容是否有效: void someFunction(std::string& foo) {
void someFunction(std::string& foo) {
functionTakingCString(("start " + foo + " end").c_str());
}
后续问题:如评论中所述,当functionTakingCString存储该指针时,这确实是不安全的。在这种情况下,以下内容是否有效:
void someFunction(std::string& foo) {
std::string bar = "start " + foo + " end";
functionTakingCString(bar.c_str());
}
连接的字符串仅在
functionTakingCString((“start”+foo+“end”).c_str()时分配代码>正在运行。然后,内存被释放,指针不再安全,无法读取。如果该指针被传递到functionTakingCString
退出后运行的任何东西,那么您将遇到问题。只要functionTakingCString
不存储该指针,并且有东西试图在临时std::string
的生存期之后使用它。感谢您的评论-我添加了一个后续问题关于您的建议,bar
s的生命周期将在}
结束,因此在您的示例中基本上是相同的问题。