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
)相同0x78
、0x56
、0x34
和 0x12
。
但是,如果我们将 int
更改为数字 1
,那么它的存储方式如下:
8 bits ,----^---. | | +--------+--------+--------+--------+ |00000000|00000000|00000000|00000001| +--------+--------+--------+--------+ | | `-----------------v-----------------' | 32 bits
这个int
与四个字节(或char
)相同0x00
、0x00
、0x00
和 0x01
。
所以现在您希望能够看到作为 int
读取并作为 char
打印将如何显示与读取、int
和打印不同的结果它是一个 int
。
关于c - fread 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13112059/