连接字符串文字上的 c_str() 是否安全?
Is c_str() on a concatenated string literal safe?
我从 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());
}
连接的字符串仅在 functionTakingCString(("start " + foo + " end").c_str());
为 运行 时分配。然后内存被释放,该指针不再安全使用,因为您可以读取 here。如果该指针被传递给在 functionTakingCString
退出后运行的任何东西,那么您将遇到麻烦。
我从 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());
}
连接的字符串仅在 functionTakingCString(("start " + foo + " end").c_str());
为 运行 时分配。然后内存被释放,该指针不再安全使用,因为您可以读取 here。如果该指针被传递给在 functionTakingCString
退出后运行的任何东西,那么您将遇到麻烦。