首页 >后端开发 >C++ >为什么将 stringstream::str().c_str() 分配给 const char* 会导致运行时错误?

为什么将 stringstream::str().c_str() 分配给 const char* 会导致运行时错误?

Patricia Arquette
Patricia Arquette原创
2024-11-16 04:46:06894浏览

Why does assigning stringstream::str().c_str() to a const char* result in a runtime error?

转换困惑:理解 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn