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

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

Patricia Arquette
发布: 2024-11-16 04:46:06
原创
893 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板