gpt4 book ai didi

c - 由于缓冲区溢出而覆盖

转载 作者:行者123 更新时间:2023-11-30 16:21:06 25 4
gpt4 key购买 nike

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”,则字符 AB 会打印“AABBB”。

如果我输入“BBBB”,则字符 AB 会打印“BBBB”

我知道 char B 溢出。但是,当我在更大的缓冲区中连接 A 和 B 时,A 消失了,为什么会发生这种情况?谁能解释清楚吗?

最佳答案

输入“BBBB”,占用内存中的 5 个字节 - 四个字母和\0 终端 - 变量 B 扩展到 A 。然后,B 的\0 终结符成为 A 的第一个字节,然后 A 现在是一个空字符串。当您在 AB 中将 B 连接到 A 时,结果是 B

关于c - 由于缓冲区溢出而覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54996174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com