连接字符串文字上的c_str()是否安全?

时间:2016-01-19 09:46:48

标签: c++ string std c-strings

我从this answer知道字符串文字是静态分配的。但是以下字符串连接是否也可以安全使用?

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());
}

1 个答案:

答案 0 :(得分:3)

仅在functionTakingCString(("start " + foo + " end").c_str());运行时分配连接字符串。然后释放内存并且指针不再安全,因为您可以阅读here。如果该指针传递给functionTakingCString退出后运行的任何内容,那么您将遇到麻烦。