c++ - std::stringstream 返回字符 *
问题描述
这是我的代码:
#include <iostream>
#include <sstream>
void serialize(std::ostream& os)
{
int r1 = 10;
int r2 = 12;
os.write(reinterpret_cast<char const*>(&r1), sizeof(r1));
os.write(reinterpret_cast<char const*>(&r2), sizeof(r2));
}
int main()
{
std::stringstream ss;
serialize(ss);
std::cout<<" Buffer length : " << ss.str().length() <<'\n'; //This print correct length
const char *ptrToBuff = ss.str().c_str();// HERE is the problem. char * does not contain anything.
std::cout <<ptrToBuff; // NOTHING is printed
}
如何获取指向流缓冲区的 char 指针?
问题是std::cout << ptrToBuff; does not print anything
解决方案
指向流的指针将留下一个悬空指针,但您可以复制字符串:
const std::string s = ss.str();
然后指向const char*
它:
const char *ptrToBuff = s.c_str();
在您的serialize
函数中,您应该使用<<
运算符写入 ostream:
os << r1 << " " << sizeof(r1) << std::endl;
os << r2 << " " << sizeof(r2) << std::endl;
所以整个代码将是:(见这里)
void serialize(std::ostream& os)
{
int r1 = 10;
int r2 = 12;
os << r1 << " " << sizeof(r1) << std::endl;
os << r2 << " " << sizeof(r2) << std::endl;
}
int main()
{
std::stringstream ss;
serialize(ss);
std::cout<<"Buffer length : " << ss.str().length() <<'\n';
const std::string s = ss.str();
const char *ptrToBuff = s.c_str();
std::cout << ptrToBuff;
}
推荐阅读
- heroku - Heroku dyno 自动重启会终止我的应用程序上正在运行的处理吗?
- azure - 如何在本地开发中调用 NoAutomaticTrigger 函数?
- c - 我是否以正确的方式用 C 语言编写了选择排序算法?
- windows - 批处理文件错误“/100 在这个时候是意外的”
- css - 如何在居中视频旁边的剩余空间中居中按钮
- mongodb - 如何从 mongo 数据库中仅导出少数集合,而不是全部?
- python - sqlite3.InterfaceError:错误绑定参数 4 - 可能不支持的类型
- python - 在 A*(A 星)算法中实现开放集时,使用 min() 获取最小值或对数组进行排序,然后在 Python 中弹出第一个值?
- java - 如何将链接列表分成两个其他列表,一个具有奇数索引,另一个具有偶数索引但以递归方式
- javascript - 我疯了,试图弄清楚如何将 JSON 响应作为字符串传递给 dynamodb 调用