C-为什么SCANF覆盖先前读取的未签名char变量为0



我试图通过scanf读取几个unsigned char值,并找到了一些奇怪的错误。在scanf的第二个呼叫中,第一个unsigned char变量被0覆盖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 = %hhun", first);
    printf("Type second unsigned char variable: ");
    scanf("%hhu", &second);
    printf("first = %hhun", first);
    printf("second = %hhun", 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兼容模式)。

最新更新