字符数组,如果没有'\0'结尾,结果输出数组越界。
#include<stdio.h>
int main(void)
{
char str[15];
int i;
for(i=0;i<15;i++)
{
str[i]='0';
}
puts(str);
return 0;
}
是否可以得出结论:
puts,printf()等对字符串的处理都以'\0'做结尾标志,如果没有碰到'\0'都会一直进行输出处理,即使数组越界
那么按道理应该一直输出,而只是越界了几位而已,且系统不报错,是否c有响应的错误处理机制?如果没有为什么会这样,如果有,又是什么原理?
[解决办法]
C语言里字符串就是一串以NUL('\0')结尾字符。只输出的话是不会报错的,它会一直输出直到遇到'\0'为止。
你的输出只越界了几位说明刚好碰到了'\0'。另外,一般来说对越界处的字符是不能随意改动的。改了关键数据是会出报错的。
[解决办法]
C语言允许越界,也没什么对这个越界的错误处理机制,但是你要承受越界带来的不确定后果,段错误,非法地址什么的。
因为允许,所以这样
[解决办法]
越界了,很多东西就没理由可讲了
在不越界的前提下,都是可解释的
[解决办法]
那可能是操作系统发现程序越界,就把进程掐死了。