c - fread 函数如何工作?

标签 c

int main()

{


  char  buffer[100];
  fread(buffer,1,4,stdin);
  int i=0;
  while(i<4)

  {
    printf ("%c,\n",buffer[i]);

    i=i+1;
  }

 getch();

}

fread 函数如何知道何时停止读取输入流、size 和 count 元素代表什么以及如何操作 size 和 count 以获得最大流读取速度?

最佳答案

要打印 int 中的所有字节吗?请记住,int 是 32 位,即四个字节。将其读入 char 缓冲区可以更轻松地访问 int 中的这四个字节。

编辑:int 类型的一些解释...

假设您有一个 int:

int someIntValue = 0x12345678;

它以 32 位的形式存储在内存中。由于单个字节 (char) 为 8 位,因此 int 有 4 个字节。 int 中的每个字节都可以使用 char 数组或指针来访问:

char *someCharPointer = (char *) &someIntValue;

现在您可以访问这四个单独的字节,并查看它们的值:

for (int i = 0; i < sizeof(int); i++)
    printf("someCharPointer[%d] = 0x%02x\n", i, someCharPointer[i]);

上面将打印(在小端机器上,例如 x86):

someCharPointer[0] = 0x78
someCharPointer[1] = 0x56
someCharPointer[2] = 0x34
someCharPointer[3] = 0x12

If you now change someIntValue to the number 1

someIntValue = 1;

然后再次打印出来,您将看到这个结果:

someCharPointer[0] = 0x00
someCharPointer[1] = 0x00
someCharPointer[2] = 0x00
someCharPointer[3] = 0x01

int的内存布局

如果内存中存储有一个 int 类型的变量,其值为 0x12345678,则其存储方式如下:

   8 bits
,----^---.
|        |

+--------+--------+--------+--------+
|00111000|01010110|00110100|00010010|
+--------+--------+--------+--------+

|                                   |
`-----------------v-----------------'
                  |
               32 bits

这个int与四个字节(或char)相同0x780x560x340x12

但是,如果我们将 int 更改为数字 1,那么它的存储方式如下:

   8 bits
,----^---.
|        |

+--------+--------+--------+--------+
|00000000|00000000|00000000|00000001|
+--------+--------+--------+--------+

|                                   |
`-----------------v-----------------'
                  |
               32 bits

这个int与四个字节(或char)相同0x000x000x000x01

所以现在您希望能够看到作为 int 读取并作为 char 打印将如何显示与读取、int 和打印不同的结果它是一个 int

关于c - fread 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13112059/

相关文章:

c - C语言中不浪费时间的进度条

c - 用于转义字符串的标准 C 库

c - Blit 比条件 + 指针增量更快?

c++ - 我的 Linux 应用程序端口在停止时被另一个服务占用

c - MPI 基本示例不起作用

c - 如何组合变量来表示C中的科学记数法?

c - pthread_cancel 有两个正在运行的进程

c++ - 将 C++ 代码与 C 代码匹配

c - 在Makefile中,如何使通配符功能适用于VPATH变量设置的所有路径中的文件

计算哈希MD5