我试图通过unsigned char
读取几个scanf
值,并发现了一些奇怪的bug。在scanf
的第二次调用期间,第一个unsigned char
变量被覆盖为0.但是写scanf(" %hhu", &second);
将导致覆盖第二个unsigned char
变量。
#include <stdio.h>
int main(void){
unsigned char first, second;
printf("Type first unsigned char variable: ");
scanf("%hhu", &first);
printf("first = %hhu\n", first);
printf("Type second unsigned char variable: ");
scanf("%hhu", &second);
printf("first = %hhu\n", first);
printf("second = %hhu\n", second);
return 0;
}
编译器细节:
gcc-core(gcc-5.1.0-tdm-1-core)
binutils(binutils-2.24-1-mingw32-bin)
mingwrt(mingwrt-3.20-2-mingw32-dev,mingwrt-3.20-2-mingw32-etc)
w32api(w32api-3.17-2-mingw32-dev)
附:使用%hu
或%u
没有任何区别。
你似乎有一个旧的,错误的MinGW版本。
相反,你可以使用mingw-w64。该项目的部分原因是由于原始项目不愿意修复这样的错误,而更倾向于责怪其他方。
使用该编译器后,使用-D__USE_MINGW_ANSI_STDIO
编译器开关来获得符合模式(遗憾的是它仍默认为Microsoft兼容模式)。