关于scanf输入控制符%c 以及%2c

我的问题

关于scanf输入控制符%c 以及%2c
在试验scanf功能的时候发现的现象
感到迷惑不解故提问

C代码
#include
int main()
{
    char a, b, c;
    scanf("%c", &a);
    printf("a: %c\n", a);
    scanf("%c", &b);
    printf("b: %c\n", b);
    scanf("%2c", &c);
    printf("c: %c\n", c);
    printf("b: %c\n", b);
    printf("%c, %c, %c\n", a, b, c);
    return 0;
}

运行结果

运行结果如下,其中第一行为输入,后面有一个回车:
abcd
a: a
b: b
c: c
b: d
a, d, c

我的疑惑

为什么在输入变量c以后 b的值变成了d呢?求解答,谢谢

配置相关

环境:win11系统, mingw8.1.0, vscode当中按F6编译运行

我已经找到问题所在了
和变量的内存地址有关
输出内存地址以后发现
内存里面存放顺序是c b a
读入c d两个字符以后 d就跑到了变量b的地方
从而把原来的值覆盖了