stringstream、string 和 char 之间的转换混淆*
转换从 stringstream.str() 获取的字符串时会出现此问题。 c_str() 转换为 const char*。了解返回字符串的内存管理和生命周期对于避免潜在错误至关重要。
代码片段演示了该问题:
假设 stringstream.str().c_str( ) 可以分配给 const char* 是不正确的。这会导致 cstr2 打印出垃圾的错误。
了解内存管理
stringstream.str() 返回一个临时字符串对象,该对象仅在结束之前有效当前表达式的。当表达式完成时,临时对象被销毁,指向其数据的指针(由 c_str() 返回)变得无效。
解决错误
解决这个问题,临时字符串对象必须存储在单独的变量中,如:
通过将临时对象存储在tmp,指针的生命周期延长,并且打印 cstr2 现在可以正常工作。
奖励积分说明
修改后的代码块中:
所有打印语句现在都可以正常工作,因为:
以上是为什么 `stringstream.str().c_str()` 会导致 C 内存错误?的详细内容。更多信息请关注PHP中文网其他相关文章!