gpt4 book ai didi

c - 在 C 中使用 fread 读取整数时出错

转载 作者:行者123 更新时间:2023-11-30 15:05:52 29 4
gpt4 key购买 nike

我编写了以下 C 代码来从输入文件中读取 5 个整数:

#include<stdio.h>
#include<stdlib.h>
int main(){
FILE *fp;
unsigned *ch;
unsigned i,n=5;

ch=(unsigned*)malloc(n*sizeof(unsigned));
fp=fopen("input","r");
fread(ch ,sizeof(unsigned),n,fp);
fclose(fp);
for(i=0;i<n;i++)
printf("\n%u ",ch[i]);
free(ch);
return 0;
}

输入文件是:

1 2 3 4 58

但是我得到的输出是:

540155953 
540287027
14389
0
0

请帮帮我。

最佳答案

fread和 fwrite 用于二进制文件。二进制文件中的数据被解释为字节,因为它们出现在内存中,而不是人类可以读取的文本文件。在 Linux 上使用 hexdump 命令,我们可以看到输入文件的十六进制值

$ hexdump -C input
00000000 31 20 32 20 33 20 34 20 35 38 0a

使用 ASCII table 的十六进制列,可以看到0x31是1个字符,0x20是空格字符等。但是因为fread将文件中的数据解释为二进制,所以它会为每个unsigned int读取4个字节。您可以检查 0x20322031(文件中前 4 个字节的倒序)是否等于 540155953。

如果你想以二进制形式生成文件中的数据并随后读取它,可以使用

#include<stdio.h>
#include<stdlib.h>
int main(){
FILE *fp;
unsigned *ch;
unsigned i,n=5;

unsigned int arr[] = {1,2,3,4,58};

ch=(unsigned*)malloc(n*sizeof(unsigned));
fp=fopen("input","w+");
fwrite(arr,sizeof(unsigned),n,fp); /* write binary */
fseek(fp, SEEK_SET, 0); /* move file cursor back to the start of the file */
fread(ch ,sizeof(unsigned),n,fp); /* read binary */
fclose(fp);
for(i=0;i<n;i++)
printf("\n%u ",ch[i]);
free(ch);
return 0;
}

并检查名为input的文件以查看差异。

正如评论中所述,您可以 fscanf如果您想将数据解释为文本文件,请使用 %u 说明符来获取 unsigned int

关于c - 在 C 中使用 fread 读取整数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554724/

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