Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 串联字符串上的c_str()是否安全?_C++_String_Std_C Strings - Fatal编程技术网

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的生命周期将在
}
结束,因此在您的示例中基本上是相同的问题。