我的文本文件的内容为:
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]);
}
我得到了结果:
我无法解释自己为什么得到这样的结果。
最佳答案
文本文件与二进制文件
您在应该用于二进制文件的文本文件上误用了fread
函数。 text file与binary file不同。
假设,如果您使用四个ASCII characters "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
(请注意,该地址只是伪造的,用于说明)
字节序
至于如何将这四个字节转换为整数,则都与Endianness有关。简而言之,如果您的平台是little-endian(例如Intel x86处理器),则最低内存地址(
00110001
)上的第一个字节(0x12345678
)将是形成整数的最低有效字节。最终,整数是二进制的
00110100001100110011001000110001
,即十进制的875770417
。关于c - C语言中的fread如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10259344/