转换困惑:理解 stringstream、string 和 char 的行为*
围绕 stringstream、string 和 char* 转换的困境由 stringstream.str().c_str() 返回的字符串的瞬态性质引起。这个临时字符串仅存在于表达式的生命周期内,很容易在语句完成时被删除。
如提供的代码片段中所示,将临时字符串分配给 const char* 会导致运行时错误,因为指针引用已释放的内存。产生的垃圾输出是此内存引用错误的表现。
为了防止此问题,可以在获取 C 字符串表示之前将临时字符串复制到更永久的位置,例如另一个字符串对象。或者,可以通过将临时字符串绑定到 const 引用来延长其生命周期,如下所示:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
此方法可确保字符串在整个引用范围内保持可访问。
以上是为什么将 stringstream::str().c_str() 分配给 const char* 会导致运行时错误?的详细内容。更多信息请关注PHP中文网其他相关文章!