-4
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 以获得最大的流读取速度?

4

1 回答 1

1

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

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

假设你有一个int

int someIntValue = 0x12345678;

这以 32 位存储在内存中。由于单个字节 ( char) 是 8 位,因此 . 有四个字节int。中的每个字节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
一些字符指针[2] = 0x34
一些字符指针[3] = 0x12

如果您现在更改someIntValue为数字1

someIntValue = 1;

并再次打印出来,你会看到这样的结果:

一些字符指针[0] = 0x00
一些字符指针[1] = 0x00
一些字符指针[2] = 0x00
一些字符指针[3] = 0x01

内存布局int

如果您int在内存中存储了一个类型为 value 的变量0x12345678,它的存储方式如下:

   8 位
,----^---。
| |

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

| |
`-----------------v-----------------'
                  |
               32 位

int与四个字节(或)char0x780x56相同。0x340x12

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

   8 位
,----^---。
| |

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

| |
`-----------------v-----------------'
                  |
               32 位

int与四个字节(或)char0x000x00相同。0x000x01

因此,现在您希望可以看到int以.charintint

于 2012-10-28T19:15:56.853 回答