为什么有可能超过C中的缓冲区大小达到一定的限制而没有任何错误(分段错误)?超过缓冲区大小?
例如,我用这个代码玩:
#include <stdio.h>
#include <string.h>
void function1(char *a) {
char buf[10];
strcpy(buf, a);
printf("End of function1\n");
}
main (int argc, char *argv[]) {
function1(argv[1]);
printf("End of main\n");
}
我能够作为一个参数传递最多23个字符,而不是10个字符没有任何错误,但是当我使用24个字符,我收到了分段故障。
我知道用第二十四个字符,我得到了返回值。但以前的13 ??怎么样!