关于C 字符串溢出问题
写了一个测试性的代码,
#include <stdio.h>
#include <string.h>
main (){
char str[5];
int i;
for (i=0; (str[i]=getchar()) != '\n'; i++)
;
printf("the string is %s, the length is %lu\n", str, strlen(str));
return 0;
}
虽然我创建的字符数组的大小是5,
但结果我输入超过5个字符时,依然能正常运行,
请问下原理是什么?
[解决办法]
C语言没有数组溢出检测。
前面5个字符是存到数组里了,可是在数组的内存空间后面紧接着就是其他数据,再继续写数据的话,就覆盖到了这些数据上,破坏了原有的数据。
虽然不会马上出问题,可是数据毕竟被修改了,等到什么时候程序需要读到这里的数据,就不是正确的数据了,会出现莫名其妙的错误。
[解决办法]
c 认为你是成人,要为自己的行为负责
[解决办法]
未定义行为,编译器对编译器的结果不做任何保证,当然包括 不保证必须出错