首页 >后端开发 >C++ >为什么 `stringstream.str().c_str()` 会导致 C 内存错误?

为什么 `stringstream.str().c_str()` 会导致 C 内存错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-15 05:01:021040浏览

Why Does `stringstream.str().c_str()` Cause a Memory Error in C  ?

stringstream、string 和 char 之间的转换混淆*

转换从 stringstream.str() 获取的字符串时会出现此问题。 c_str() 转换为 const char*。了解返回字符串的内存管理和生命周期对于避免潜在错误至关重要。

代码片段演示了该问题:

假设 stringstream.str().c_str( ) 可以分配给 const char* 是不正确的。这会导致 cstr2 打印出垃圾的错误。

了解内存管理

stringstream.str() 返回一个临时字符串对象,该对象仅在结束之前有效当前表达式的。当表达式完成时,临时对象被销毁,指向其数据的指针(由 c_str() 返回)变得无效。

解决错误

解决这个问题,临时字符串对象必须存储在单独的变量中,如:

通过将临时对象存储在tmp,指针的生命周期延长,并且打印 cstr2 现在可以正常工作。

奖励积分说明

修改后的代码块中:

所有打印语句现在都可以正常工作,因为:

  • cstr 和cstr2どちらも有效な文字列ポインタです。
  • ss.str().c_str() 是一个临时字符串,绑定到 const 引用,延长其生命周期。

以上是为什么 `stringstream.str().c_str()` 会导致 C 内存错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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