C语言字符数组赋值问题

#include<stdio.h>
int main()
{
    char cardNum[3];
    char q[3] = {"abc"};
    scanf("%s",&cardNum);
    printf("%s  %s\n",cardNum,q);
    for(int i=0;i<6;i++)
        printf("%c\t",q[i]);
    return 0;
}

上面代码运行后输入任意三个字母,比如输入aaa
字符数组q就会变成“abcaaa”。这是怎么回事,有没有大佬知道。

数组越界了,q的大小为3个char, 循环里面后三个在访问数组外的内容. 这是未定义行为
这个例子很可能cardNumber的地址恰好在q后面,
你可以输出地址看看是不是这样
printf("q : %p\n", (void*)&q);
printf("cardNum : %p\n", (void*)&cardNum);