首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C 字符串溢出有关问题

2012-02-03 
关于C 字符串溢出问题写了一个测试性的代码,#include stdio.h#include string.hmain (){char str[5]i

关于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 认为你是成人,要为自己的行为负责
[解决办法]
未定义行为,编译器对编译器的结果不做任何保证,当然包括 不保证必须出错

热点排行