C++ std::stringstream返回字符*

C++ std::stringstream返回字符*,c++,stringstream,C++,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*>(&

这是我的代码:

#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
}
#包括
#包括
void序列化(std::ostream&os)
{
int r1=10;
int r2=12;
操作系统写入(重新解释类型(&r1),大小(r1));
操作系统写入(重新解释强制转换(&r2),大小(r2));
}
int main()
{
std::stringstream-ss;
连载(ss);

std::cout指向流的指针将留下一个悬空指针,但您可以复制字符串:

const std::string s = ss.str(); 
然后将
常量字符*
指向它:

const char *ptrToBuff = s.c_str();

在你的
序列化
函数中,你应该使用
@user305907你说得对,我用解决方案编辑了这篇文章。
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; 
}