Почему scanf («% hhu», char *) перезаписывает другие переменные, когда они локальные?

Название говорит само за себя. Я'Я использую GCC 4.7.1 (в комплекте с CodeBlocks), и я столкнулся со странной проблемой. Учти это:

int main() {
    unsigned char a = 0, b = 0, c = 0;
    scanf("%hhu", &a);
    printf("a = %hhu, b = %hhu, c = %hhu\n", a, b, c);
    scanf("%hhu", &b);
    printf("a = %hhu, b = %hhu, c = %hhu\n", a, b, c);
    scanf("%hhu", &c);
    printf("a = %hhu, b = %hhu, c = %hhu\n", a, b, c);
    return 0;
}

Для входов 1, 2 и 3 это выходы

a = 1, b = 0, c = 0
a = 0, b = 2, c = 0
a = 0, b = 0, c = 3

Если я, однако, объявляю a, b и c глобальными переменными, это работает как ожидалось. Почему это происходит?

заранее спасибо

Другие детали: я

м под управлением Windows 8 64 бит. Я также попытался с -std = c99, и проблема сохраняется.

Дальнейшие исследования

Тестирование этого кода

void printArray(unsigned char *a, int n) {
    while(n--)
        printf("%hhu ", *(a++));
    printf("\n");
}

int main() {
    unsigned char array[8];
    memset(array, 255, 8);
    printArray(array, 8);
    scanf("%hhu", array);
    printArray(array, 8);
    return 0;
}

показывает, что scanf интерпретирует% HHU» как "% U», Это прямо игнорированиечч», Вывод кода со входом 1:

255 255 255 255 255 255 255 255
1 0 0 0 255 255 255 255

Ответы на вопрос(1)

Ваш ответ на вопрос