stringstream、string 和 char* 转换混乱
本文解决了将 const char* 分配给 stringstream 返回的字符串的问题.str().c_str().
问题说明
stringstream.str() 构造一个临时字符串对象,该对象在表达式末尾被销毁。当将此临时字符串分配给 const char* 时,指针引用了已删除的字符串,从而导致垃圾输出。
下面是一个示例:
stringstream ss("this is a string\n"); const char* cstr = ss.str().c_str();
在上面的代码中,表达式之后结束后,由 stringstream.str() 创建的临时字符串被删除,导致 cstr 指向无效的内存位置。
解决方案
要纠正此问题,在将临时字符串转换为 const char* 之前,应将其复制到另一个字符串对象。这可以使用以下方法来实现:
string tmp = stringstream.str(); const char* cstr = tmp.c_str();
奖励积分说明
以下修改后的代码可以正确打印字符串:
cout << cstr << ss.str().c_str() << cstr2;
此修改之所以有效,是因为:
以上是为什么将 stringstream.str().c_str() 分配给 const char* 会导致垃圾输出?的详细内容。更多信息请关注PHP中文网其他相关文章!