为什么 scanf 会用 0 覆盖之前读取的 unsigned char 变量?
Why scanf overrides previously readed unsigned char variables with 0?
我尝试通过 scanf
读取几个 unsigned char
值并发现了一些奇怪的错误。在 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-核心 (gcc-5.1.0-tdm-1-核心)
binutils (binutils-2.24-1-mingw32-bin)
mingwrt (mingwrt-3.20-2-mingw32-dev, mingwrt-3.20-2-mingw32-dll)
w32api (w32api-3.17-2-mingw32-dev)
P.S。使用 %hu
或 %u
没有区别。
您的 MinGW 版本似乎有问题。
您可以使用 mingw-w64。该项目分叉的部分原因是原始项目不愿意修复这样的错误,更愿意责怪其他方。
使用该编译器后,使用 -D__USE_MINGW_ANSI_STDIO
编译器开关获得一致模式(不幸的是它仍然默认为 Microsoft 兼容模式)。
我尝试通过 scanf
读取几个 unsigned char
值并发现了一些奇怪的错误。在 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-核心 (gcc-5.1.0-tdm-1-核心)
binutils (binutils-2.24-1-mingw32-bin)
mingwrt (mingwrt-3.20-2-mingw32-dev, mingwrt-3.20-2-mingw32-dll)
w32api (w32api-3.17-2-mingw32-dev)
P.S。使用 %hu
或 %u
没有区别。
您的 MinGW 版本似乎有问题。
您可以使用 mingw-w64。该项目分叉的部分原因是原始项目不愿意修复这样的错误,更愿意责怪其他方。
使用该编译器后,使用 -D__USE_MINGW_ANSI_STDIO
编译器开关获得一致模式(不幸的是它仍然默认为 Microsoft 兼容模式)。