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会消失,为什么会发生?有人能解释清楚吗?
输入"BBBB"
,占用内存中的5个字节 - 四个字母和\ 0终端 - 变量B
扩展到A
。然后B
的\ 0终端成为A
的第一个字节,然后A
现在是一个空字符串。儿子当你在B
将A
连接到AB
时,结果是B
。