Mar*_*Cox 2 c segmentation-fault undefined-behavior
我正在玩缓冲区溢出,但我对在Mac OS上运行以下简单的C程序时发现的内容感到困惑.
#include <stdio.h>
int main(void) {
char buf[2];
scanf("%s", buf);
printf("%s\n", buf);
}
Run Code Online (Sandbox Code Playgroud)
通过将buf的长度设置为2个字节,我预计在输入字符串"CCC"时会导致分段错误,但这不会发生.只有在输入长度为24个字符的字符串时才会出现分段错误.
这是怎么回事?它与字符编码有关吗?
谢谢.
一旦溢出缓冲区,程序的行为就不会被定义.任何事情都可能发生.你无法预测它.
缓冲区之后可能会或可能不会有一些填充字节,这对您的代码执行来说并不重要.你不能依赖它.一个不同的编译器,编译为32位与64位,调试设置......所有这些都可能在溢出后改变代码执行.