char A[3] = "AA";
char B[4];
printf("Type : ");
gets(B);
char AB[20]; // just big size
strncpy(AB, A, 3);
strncat(AB, B, 4);
printf("%s", AB);
是的,我知道这是易受攻击的代码(b / c获取)。
如果我键入“ BBB”,则char AB打印“ AABBB”。
如果我键入“ BBBB”,那么char AB打印“ BBBB”
我知道char B溢出。但是,当我在较大的缓冲区中串联A和B时,A消失了,为什么会发生呢?有人可以清楚解释吗?
答案 0 :(得分:0)
输入"BBBB"
占用了内存中的5个字节-四个字母和\ 0终端-变量B
扩展到A
。然后B
的\ 0端子成为A
的第一个字节,然后A
现在是一个空字符串。将B
连接到A
中的AB
时,结果为B
。