-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関数は、入力ストリームの読み取りを停止するタイミング、サイズとカウントの要素は何を意味するのか、サイズとカウントを操作して最大のストリーム読み取り速度を取得する方法をどのように認識しますか?

4

1 に答える 1

1

int?内のすべてのバイトを出力するには anintは 32 ビット、つまり 4 バイトであることに注意してください。それをcharバッファに読み込むと、.xml 内のこれらの 4 バイトに簡単にアクセスできますint

編集:タイプの説明はほとんどありintません...

あなたが持っているとしましょうint

int someIntValue = 0x12345678;

これはメモリに 32 ビットで格納されます。1 バイト ( char) は 8 ビットなので、 まで 4 バイトありますint。の各バイトには、配列またはポインターintを使用してアクセスできます。char

char *someCharPointer = (char *) &someIntValue;

これで、これらの 4 つの個別のバイトにアクセスして、それらの値を確認できます。

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

someIntValue今の番号に変えたら1

someIntValue = 1;

もう一度印刷すると、次の結果が表示されます

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

のメモリ レイアウトint

type の変数がintvalue でメモリに保存されている場合、次0x12345678のように保存されます。

   8ビット
、----^-----。
| | | |

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

| | | |
「-----------------v-----------------」
                  | |
               32ビット

これintは、4 バイト (またはchar) 0x780x560x34および と同じ0x12です。

ただし、をint数値に変更すると、次1のように保存されます。

   8ビット
、----^-----。
| | | |

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

| | | |
「-----------------v-----------------」
                  | |
               32ビット

これintは、4 バイト (またはchar) 0x000x000x00および と同じ0x01です。

intこれで、 として読み取って として印刷すると、 として読み取って印刷するchar場合とは異なる結果がどのように表示されるかがわかると思います。intint

于 2012-10-28T19:15:56.853 に答える