为什么我能够复制比 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"。它包括空终止字符。
我有以下代码:
#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"。它包括空终止字符。