The title says it all.
I'm using GCC 4.7.1 (bundled with CodeBlocks) and I faced a strange issue. Consider this:
int main() {
unsigned char a = 0, b = 0, c = 0;
scanf("%hhu", &a);
printf("a = %hhu, b = %hhu, c = %hhu
", a, b, c);
scanf("%hhu", &b);
printf("a = %hhu, b = %hhu, c = %hhu
", a, b, c);
scanf("%hhu", &c);
printf("a = %hhu, b = %hhu, c = %hhu
", a, b, c);
return 0;
}
For inputs 1, 2 and 3, this outputs
a = 1, b = 0, c = 0
a = 0, b = 2, c = 0
a = 0, b = 0, c = 3
If I, however, declare a, b and c as global variables, it works as expected.
Why is this happenning?
Thank you in advance
Other details:
I'm running Windows 8 64 bits. I also tried with -std=c99 and the problem persists.
Further research
Testing this code
void printArray(unsigned char *a, int n) {
while(n--)
printf("%hhu ", *(a++));
printf("
");
}
int main() {
unsigned char array[8];
memset(array, 255, 8);
printArray(array, 8);
scanf("%hhu", array);
printArray(array, 8);
return 0;
}
shows that scanf is interpreting "%hhu" as "%u". It is directly ignoring the "hh". The output of the code with input 1 is:
255 255 255 255 255 255 255 255
1 0 0 0 255 255 255 255
See Question&Answers more detail:
os