期待它时没有出现分段错误

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个字符的字符串时才会出现分段错误.

这是怎么回事?它与字符编码有关吗?

谢谢.

Mat*_*Mat 5

一旦溢出缓冲区,程序的行为就不会被定义.任何事情都可能发生.你无法预测它.

缓冲区之后可能会或可能不会有一些填充字节,这对您的代码执行来说并不重要.你不能依赖它.一个不同的编译器,编译为32位与64位,调试设置......所有这些都可能在溢出后改变代码执行.