为什么我能够复制比 char 数组中定义的字节更多的字节?

Why am I able to copy more bytes than defined in the char array?

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char buffer[2];
    strcpy(buffer, "12345678910");
    printf("%s\n", buffer);
    return 0;
}

既然我已经定义了大小为2的char数组,我应该不能放入超过2 char plus null terminating character的。然而,它能够在没有任何缓冲区溢出或分段错误的情况下花费更多。即使我复制字符串 strcpy(buffer, "123456789101298362936129736129369182");,它也能正常工作。当我按下 strcpy(buffer, "1234567891012983629361297361293691823691823869182632918263918");.

时会产生错误

与其说是实际问题,不如说是理论问题,但我希望它对新手和有经验的程序员都有帮助,因为它讨论了基础知识,并有助于提高编码道德。提前致谢。

答案很简单,C 并不能保护您免受自己的伤害。检查边界是你的责任。该程序将在您指定的任何地方愉快地读写。但是,如果您这样做,操作系统可能会说些什么,通常是 "segmentation fault"。更糟糕的情况是它可能会覆盖其他变量。

这是 C 中许多错误的来源,所以要小心。每当您在缓冲区外写入​​时,您都会调用 未定义的行为,这些行为会以各种方式表现出来,包括程序正常工作、覆盖变量和分段错误。

I shouldn't be able to put in more than 2 char plus null terminating character

这是一个常见错误。这不是 "plus null terminating character"。它包括空终止字符。