2012-04-28 16 views
4

これはなぜ動作しないのか説明できる人はいますか?私は、charバッファにunsigned intを入れて、別のunsigned intに戻しています。unsigned intをchar配列に入れてそれを元に戻す方法

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を実行すると動作します。しかし、私はビット単位のアプローチを取るとうまくいきません。面白いのは、私はそれが動作するようにバッファサイズを置くときです。しかし、私は大きなバッファ、または50を使用する場合、それは常にbitwise appraochで368を出力します。再びmemcpyはうまく動作します。

答えて

10

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

+0

gccは、 '-Wall'に含まれている' -Wuninitialized'を指定すると警告します。 – Christoph

+1

オプションなしでOPに警告しました。 ;-) –

+0

あなたは正しいです!ありがとう!!それはテストされたものがゴミで初期化され、私がやっているのはそれを上書きしているからですか? – user949110

関連する問題