2

我正在尝试使用 fstream 从二进制文件中读取一些我之前写过的数据。

问题是在函数结束后显示主题中的消息

代码如下:

ifstream in("contrib.bin", ios::in | ios::binary );

char *nume, dim;
in.read((char*)&dim, sizeof(int));
nume = new char[dim + 1];
in.read(nume, dim);
nume[dim] = '\0';
double imp;
in.read((char*)&imp, sizeof(double));

delete [] nume;

现在,我已经完成了作业并寻找了这个问题,但是遇到它的其他人有数组,而我的变量是一个简单的字符。

有人可以指出我正确的方向吗?

4

3 回答 3

13

编码

char dim;
in.read((char*)&dim, sizeof(int));

定义一个 1 字节的字符,然后将sizeof(int)字节(可能大于 1)读入其中。这是无效的,可能会损坏您的堆栈。

如果需要读取sizeof(int)字节,声明dimint. 否则,将您读取的字节数更改为 1。最好还sizeof(dim)确保您只读取与您提供的存储空间一样多的字节数:

in.read((char*)&dim, sizeof(dim));
于 2013-01-11T16:28:27.620 回答
7

in.read((char*)&dim, sizeof(int));是不正确的,dim只保留sizeof(char)它是一个,但你正试图读sizeof(int)入它。

之后所有的手套都脱掉了。

于 2013-01-11T16:28:12.453 回答
2

好吧,您定义一个字符,然后以 int 的大小读取。那将是第一个问题

char *nume, dim;
in.read((char*)&dim, sizeof(char));
于 2013-01-11T16:29:10.997 回答