为什么scanf覆盖以前用0重写的无符号char变量?

问题描述 投票:2回答:1

我试图通过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没有任何区别。

c windows scanf mingw unsigned-char
1个回答
1
投票

你似乎有一个旧的,错误的MinGW版本。

相反,你可以使用mingw-w64。该项目的部分原因是由于原始项目不愿意修复这样的错误,而更倾向于责怪其他方。

使用该编译器后,使用-D__USE_MINGW_ANSI_STDIO编译器开关来获得符合模式(遗憾的是它仍默认为Microsoft兼容模式)。

© www.soinside.com 2019 - 2024. All rights reserved.