C++ ostringstream.str().c_str()

C++ ostringstream.str().c_str()

本文关键字:str ostringstream C++      更新时间:2023-10-16

我想以二进制形式打开文件并加载到const char*。

一切都很好,直到c_str((

ifstream t("movie.mp4", ios::binary);
ostringstream file_string_o;
file_string_o << t.rdbuf();
string file_string = file_string_o.str();

当我使用 c_str(( 时,这是问题:

std::cout << file_string << std::endl;// output: QEQEQEQEQEQEQEQEQEQE� etc..
std::cout << file_string.c_str() << std::endl;//output ���

它只返回我的 3 个字节。为什么?

谢谢

这不是

c_str()问题所在。

std::string::c_str(( 返回字符串表示的所有数据。

问题是 const char * 的重载operator <<在遇到的第一个 0 字节处停止。换句话说,它operator <<阻止您获取所有数据。

为了缓解这种情况,您可以使用这样的cout

std::cout.write(file_string.c_str(), file_string.size());
cout << std::endl;

write() 成员函数获取指向缓冲区的指针以及从该指针开始写入的字节数。