gpt4 book ai didi

c - 为什么 fread 从非二进制文件中读取垃圾?

转载 作者:行者123 更新时间:2023-11-30 20:50:38 25 4
gpt4 key购买 nike

我知道 fread 不适用于非二进制文件。但是,我想知道:如果我为函数提供正确的输入大小,为什么它不应该返回正确的值,而是返回垃圾?

FILE *fp;
int val = 0;

if(fp = fopen("test.txt", "r")){
fread(&val, sizeof(int), 1, fp);
printf("val read %d \n", val);

fclose(fp);

}

if(fp = fopen("test.txt", "r")){
fscanf(fp, "%d", &val);
printf("val read %d \n", val);

fclose(fp);

}

举个例子,如果我读取一个只有 1234567 的文件,输出是

val read 875770417

val read 1234567

最佳答案

您将 fscanf 与 -d 说明符一起使用,该说明符根据规范提取 - 任意数量的十进制数字 (0-9),可以选择在前面加一个符号(+ 或 -)。

问题是数字不是以字符串形式存储在二进制文件中,而是以字节形式存储。要以字节为单位读取数据,请使用 fread。请看这里: Using fscanf in binary mode

关于c - 为什么 fread 从非二进制文件中读取垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42189187/

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