gpt4 book ai didi

c - fwrite 和 fread 顺序问题

转载 作者:可可西里 更新时间:2023-11-01 11:23:25 25 4
gpt4 key购买 nike

我正在尝试将带有数组的简单结构写入文件,然后读取它。它适用于小于 25 的小数组,但由于某种原因,此后的所有数据均未初始化;

typedef struct TestStruct {
int data[30];
} TestStruct;



TestStruct *test = malloc(sizeof(TestStruct));
for (int i = 0; i < 30; i++)
{
test->data[i] = i;
}
const char *filename = "some.txt";
FILE *file = fopen(filename, "w+");
fwrite(test, sizeof(TestStruct), 1, file);
rewind(file);
TestStruct *test2 = malloc(sizeof(TestStruct));
int rc = fread(test2, sizeof(TestStruct), 1, file);

这段代码的结果是 rc = 0 并且索引 25 之后的整数由于某种原因没有被初始化。谁能解释一下问题出在哪里?

最佳答案

  • 您在 Windows 或 DOS 平台上工作。
  • 您正在使用二进制数据。
  • 您将 control-Z 写入文件(索引 26 处的字节代码 26)。
  • 因为您没有在与 fopen() 一起使用的模式字符串中指定 b(对于二进制),所以当您读取数据。

修复:使用"w+b" 而不仅仅是"w+" 来处理问题。

请注意,fread() 的返回值 rc = 0 表示读取未能读取请求的整个结构(因为只有 26 个字节,值为 0.. 25,在检测到 EOF 之前被读取)。它已尽力让您知道存在问题。

您还应该查看 fwrite() 的返回值,以确保您期望写入的所有内容实际上都已写入。

关于c - fwrite 和 fread 顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com