2017-01-26 16 views
1

Я начинаю с программирования c, и я думаю, что я не уверен в использовании переменных unsigned . Я знаю, что 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 

Почему я получаю различные числа в значении [х]?

+5

Возможный дубликат (HTTP : //stackoverflow.com/questions/17216663/how-does-an-uninitialized-variable-get-a-random-value) – Gerhardh

+0

'static uint8_t ...' :) Но это уже другая история (правильные ответы летят вокруг). – 0andriy

+1

Выдающийся ответ, но вы не сказали, какие значения вы ожидаете напечатать. –

ответ

4

Неопределенное поведение для чтения значения неинициализированной переменной. Другими словами, правила языка программирования C не описывают и не ограничивают поведение вашей программы.

Для того, чтобы ваша программа хорошо себя, вы должны дать переменной значение перед чтением, например: [? Как неинициализированная переменная получить случайное значение]

uint8_t value[4] = { 3, 19, 26, 1 };