0

我在读取和写入二进制信息时遇到了一些问题。我可以成功地将一个简单的字符串写入文本文件,在这种情况下,我的文件 '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;
}
4

2 回答 2

3

错误就在这里。

char* buffer;
input.read(buffer, size);

您正在阅读指向的内存buffer

但它指向哪里?指针buffer从未被初始化。

如果你知道你需要多少空间,这样的方法就会奏效。

std::vector<char> buffer(size);
input.read(&buffer.front(), size);
于 2013-03-17T23:50:27.810 回答
0

我真的无法理解这段代码出了什么问题,因为它看起来很好,并且对我来说很好用。不过,您分配的缓冲区缺少用于标记字符字符串结束的空终止符。只需将其更改为:

buffer = new char[size+1];
input.read(buffer, size);
buffer[size] = 0;
于 2013-03-18T00:40:05.807 回答