浏览 stringstream、string 和 char* 转换
在 C 中处理字符串时,程序员在 stringstream、string 之间转换时经常会遇到混乱和 char*。本文深入探讨了这些转换的复杂性,澄清了误解并提供了实用的解决方案。
理解 stringstream.str().c_str()
症结所在问题的关键在于理解 stringstream.str().c_str() 返回的字符串的生命周期。这个临时字符串对象在表达式末尾被销毁,使得从它获得的任何指针(如 const char* cstr2)无效。
解决混乱
到解决此问题,请避免将 stringstream.str().c_str() 直接分配给 const char*。相反,在另一个字符串对象中创建临时字符串的副本,然后从中获取 C 字符串:
const std::string tmp = stringstream.str(); const char* cstr = tmp.c_str();
或者,通过在表达式中使用临时字符串来限制临时字符串的生命周期:
use_c_str( stringstream.str().c_str() );
为了效率和清晰度,将临时值绑定到 const 引用:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
以上是如何在 C 中的 stringstream、string 和 char* 之间安全地转换?的详细内容。更多信息请关注PHP中文网其他相关文章!