我在阅读和编写二进制信息时遇到了一些麻烦。我可以成功地将一个简单的字符串写入文本文件,在这种情况下,我的文件'output.dat'包含句子“你好,这是一个句子”。
但是,我无法读回我的信息。我无法确定问题所在。我打算稍后更改从二进制文件读取的信息的每个字节,因此返回值作为字符串帮助。
感谢您提供的任何帮助。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void write(const string &input) {
fstream output("output.dat", ios::out | ios::binary);
if (output.is_open()) {
output.write(input.c_str(), input.size());
output.close();
}
}
string read(const string &fname) {
int size;
char* buffer;
fstream input(fname, ios::in | ios::binary);
if (input.is_open()) {
input.seekg(0, ios::end);
size = input.tellg();
input.seekg(0, ios::beg);
buffer = new char[size];
input.read(buffer, size);
input.close();
}
string result(buffer);
return result;
}
int main () {
cout << read("output.dat") << endl;
system("pause");
return 0;
}
答案 0 :(得分:3)
错误就在这里。
char* buffer;
input.read(buffer, size);
您正在读取buffer
指向的内存。
但它指向哪里?指针buffer
从未初始化。
如果你知道你需要多少空间,这样的方法就可以了。
std::vector<char> buffer(size);
input.read(&buffer.front(), size);
答案 1 :(得分:0)
我真的无法理解这段代码出了什么问题,因为它看起来很好,而且对我很好。然而,您分配的缓冲区缺少空终止符以标记char-string end。只需将其更改为:
buffer = new char[size+1];
input.read(buffer, size);
buffer[size] = 0;