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

问个小疑点

2012-03-09 
问个小问题char p[]{a,e,r}char q[15]{a,e,r}printf(p%d\nq%d\n,strlen(p),strlen(q)

问个小问题

  char p[]={'a','e','r'};
  char q[15]={'a','e','r'};
  printf("p=%d\nq=%d\n",strlen(p),strlen(q)); 

VS2008下输出的是15,3
问下15是怎么来的,
size_t strlen_a(const char * str) {
  size_t length = 0 ;
  while (*str++ )
  ++ length;
  return length;
 }
第一个为什么不是6呢?

[解决办法]
char p[]={'a','e','r'};//这里没有结束符'\0';strlen就会一直往后找为'\0'的字符(已经访问越界,结果不能确定)
char q[15]={'a','e','r'};//'r'之后的元素没有显式初始化,被始化为'\0',所以很幸运的,这个可以得到正确的结果..

热点排行