fread如何在C中工作?
我有一个文本文件,内容如下:fread如何在C中工作?,c,fread,C,Fread,我有一个文本文件,内容如下: 12345678901222344567 然后我用这个代码来阅读内容: FILE * pFile; int c; char buffer [256]; pFile = fopen ("myfile.txt","r"); int a[50] = {0}; fread(a, sizeof(a[0]), 5, pFile); fclose(pFile); for (c = 0; c < 5; c++) { printf("%
12345678901222344567
然后我用这个代码来阅读内容:
FILE * pFile;
int c;
char buffer [256];
pFile = fopen ("myfile.txt","r");
int a[50] = {0};
fread(a, sizeof(a[0]), 5, pFile);
fclose(pFile);
for (c = 0; c < 5; c++)
{
printf("%d\n", a[c]);
}
文件*pFile;
INTC;
字符缓冲区[256];
pFile=fopen(“myfile.txt”、“r”);
int a[50]={0};
fread(a,sizeof(a[0]),5,pFile);
fclose(pFile);
对于(c=0;c<5;c++)
{
printf(“%d\n”,a[c]);
}
我得到了结果:
我无法解释我为什么会得到这样的结果。您有一个文本文件,但fread读取二进制数据。因此,您存储的是文件中的字节,而不是文件的文本。尝试使用fread来填充未使用的
缓冲区变量,您应该能够获得文本字符串,然后可以使用sscanf()解析该字符串。或者您可以停止使用fread而改用fscanf。这是正确的结果。您读取的数据是二进制数据,而不是文本或整数。前四个字节是0x31323334,在英特尔机器上读取时,该字节会翻转为0x34333231,十进制为875770417 文本文件与二进制文件的比较
您在本应用于二进制文件的文本文件上误用了fread
函数。A与A不同
比方说,如果您使用四个“1”
,“2”
,“3”
,“4”
,保存txt,那么实际存储在磁盘上的不是1
,2
,3
,4
。相反,这是他们的ACSII代码:49
,50
,51
,52
。
因此,当您将sizeof(a[0])
字节读入a[0]
时,四个字节在内存中被读回,如下所示:
Memory Address Byte In Memory Little-endian
0x12345678 00110001 <----least significant byte
0x12345679 00110010
0x12345680 00110011
0x12345681 00110100 <----most significant byte
内存地址字节在内存小端
0x12345678 00110001好的,知道了。还有一个问题:如何将00110100 00110011 00110010 00110001转换为875770417@ipkiss,请参阅我的最新答案。这都是关于Endianness的东西。