2017-01-26 6 views
1

私はCプログラミングから始めていますが、符号なし 変数の使用についてはわかりません。 私はuint8_tが符号なし8ビット整数型であることを知っています。つまり、負であってはならないことを意味します。したがって、8ビットすべてが正の数になっていれば、0から255までの数値を表します。 しかし、私はこれを書く:なぜuint8_t配列を印刷すると、異なる値が表示されるのですか?

int main() { 

uint8_t value [4]; 

printf("\nvalue:\t%" PRIu8 "", value[0]); 
printf("\nvalue:\t%" PRIu8 "", value[1]); 
printf("\nvalue:\t%" PRIu8 "", value[2]); 
printf("\nvalue:\t%" PRIu8 "", value[3]); 
printf("\n"); 

} 

私は私が作ったたびに異なる結果を得る:./test:

[email protected]:~/Desktop$ ./test 

value: 48 
value: 99 
value: 13 
value: 193 

[email protected]:~/Desktop$ ./test 

value: 176 
value: 76 
value: 71 
value: 0 

[email protected]:~/Desktop$ ./test 

value: 64 
value: 13 
value: 5 
value: 175 

私は値が異なる番号を取得するのはなぜ[x]は?

+5

の可能性のある重複(HTTP [どのように初期化されていない変数がランダムな値を取得するのですか?] ://stackoverflow.com/questions/17216663/how-does-an-uninitialized-variable-get-a-random-value) – Gerhardh

+0

'static uint8_t ...' :)しかしそれは別の話です(適切な答えは飛んでいます)。 – 0andriy

+1

upvoted答えですが、あなたは印刷されると期待される値を言っていませんでした。 –

答えて

4

初期化されていない変数の値を読み取ることは未定義の動作です。言い換えれば、Cプログラミング言語の規則は、プログラムがどのように振る舞うべきかを記述したり、制約したりすることはありません。あなたのプログラムが行儀ようにするに

、あなたが例えば、それを読む前に、変数に値を与える必要があります。

uint8_t value[4] = { 3, 19, 26, 1 }; 
関連する問題