タイトルがすべてを物語っています。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" と解釈していることを示しています。「hh」を直接無視しています。入力 1 を使用したコードの出力は次のとおりです。
255 255 255 255 255 255 255 255
1 0 0 0 255 255 255 255