连接字符串文字上的 c_str() 是不是安全?
Posted
技术标签:
【中文标题】连接字符串文字上的 c_str() 是不是安全?【英文标题】:Is c_str() on a concatenated string literal safe?连接字符串文字上的 c_str() 是否安全? 【发布时间】:2016-01-19 09:46:47 【问题描述】:我从this answer 知道字符串文字是静态分配的。但是下面的字符串连接也可以安全使用吗?
void someFunction(std::string& foo)
functionTakingCString(("start " + foo + " end").c_str());
后续问题:如 cmets 中所述,当 functionTakingCString 存储该指针时,这确实是不安全的。在这种情况下,以下内容是否有效:
void someFunction(std::string& foo)
std::string bar = "start " + foo + " end";
functionTakingCString(bar.c_str());
【问题讨论】:
只要functionTakingCString
不存储该指针,并且在临时std::string
的生命周期之外尝试使用它。
感谢您的评论 - 我添加了关于您的建议的后续问题
bar
s 的生命周期无论如何都会在
结束,所以在您的示例中基本上是相同的问题。
【参考方案1】:
仅在functionTakingCString(("start " + foo + " end").c_str());
运行时分配连接的字符串。然后内存被释放,并且该指针不再安全使用,因为您可以阅读here。如果将该指针传递给在functionTakingCString
退出后运行的任何内容,那么您将遇到麻烦。
【讨论】:
以上是关于连接字符串文字上的 c_str() 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
目前是不是有将两个或多个字符串文字类型连接到 TypeScript 中的单个字符串文字类型?