我想将文件打开为二进制文件并加载到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个字节。为什么?
由于
答案 0 :(得分:4)
问题不在于c_str()
。
std::string::c_str() returns all the data the string represents.
问题是operator <<
的重载const char *
在遇到的第一个0
字节处停止。换句话说,operator <<
阻止您获取所有数据。
为了缓解这种情况,您可以像这样使用cout
:
std::cout.write(file_string.c_str(), file_string.size());
cout << std::endl;
write()
成员函数接受一个指向缓冲区的指针以及从该指针开始写入的字节数。