Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fread如何在C中工作?_C_Fread - Fatal编程技术网

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的东西。