4

誰かがこれが機能しない理由を説明できますか?unsigned intをcharバッファーに入れて、それを別のunsignedintにフェッチしようとしています。

  1 #include<stdio.h>
  2 #include<string.h>
  3 int main(){
  4   unsigned int tester = 320;
  5   char buffer[512];
  6   memset(buffer,0,512);
  7   memcpy(buffer,&tester,sizeof(unsigned int));
  8   /*buffer[0]|=tester;
  9   buffer[1]|=(tester>>8);
 10   buffer[2]|=(tester>>16);
 11   buffer[3]|=(tester>>24);*/
 12   unsigned int tested;
 13   memcpy(&tested,buffer,sizeof(unsigned int));
 14 
 15   /*tested|=(buffer[3]<<24);
 16   tested|=(buffer[2]<<16);
 17   tested|=(buffer[1]<<8);
 18   tested|=(buffer[0]);*/
 19   printf("\n %d\n",tested);
 20 }

memcpyを実行すると、機能します。しかし、ビット単位のアプローチを取ると、機能しません。面白いのは、バッファサイズを20にすると動作することです。しかし、大きなバッファ、または50を使用すると、ビット単位のアプローチで常に368が出力されます。再びmemcpyは正常に動作します。

4

1 に答える 1

10

12行目でテストを宣言するときはunsigned int tested;、ゼロに初期化する必要があります。unsigned int tested =0;また、-Wuninitializedまたは-Wallを使用してコンパイルすると、テストが初期化されていないことを警告します。

于 2012-04-28T21:04:19.713 に答える