#include"stdio.h"#include"string.h" void main() { char c[]={'a','b','c'};printf("%d\n",strlen(c));}怎么输出是7啊,加将c[]换成c[7]或者加上'\0'又对了,strlen函数是遇到'\0'终止,但是c[7]={'a','b','c'};同样没有'/0',但是求长是正确的,我记得系统会默认加上'\0'的,例如c[7]={'a','b','c'};系统实际上存的是'a','b','c','\0','\0','\0','\0'。高手帮忙看下为什么strlen求错了,这种问题该怎么避免?最佳答案:问题出在:char p[]={'a','b','c'},p[]你没指定长度,系统就不知道,默认也为无限长(可以验证:你输入p[16]都还可以看到有输出,因为你没指定p[16],所以这个输出是系统随机给的),这时你调用strlen函数来求“长度未知”的字符串,strlen“很聪明”,它就会给你输出一个奇怪的7(但不一定只是7,你换个其他长度的字符串它又可能输出其他数了)而且:char p[]这种形式下系统是不会在结尾默认加上'\0'的!。只有在指定长度char p[5]={'a','b','c'}或者字符串形式char p[]="abc"的情况下系统才会在末尾默认加上'\0',这时就不会出错。
3 回答
烙印99
TA贡献1829条经验 获得超13个赞
如果您的空白内存单元比较多的话,那么在数组最后一个元素'c’之后可能是'\0',那么正好结束strlen函数,而输出3,我刚把您的代码复制过去,运行了下是3,以前我也不明白为什么,有的时候正确,有的时候错误,原因就是没有在数组即字符串末尾加'\0',所以赋值最好用字符串,即方便,系统又会自动加结束符,希望能够帮到您。
largeQ
TA贡献2039条经验 获得超7个赞
输出结果是不确定的,因为你的char数组不存在末尾的'\0'
正确的初始化方式应该是:char c[] = "abc";
补充:
只有字符串形式的初始化,编译器才会帮你在某位补零
你用的那种方式,得到数组长度就是3,哪里来有位置补零呢?
慕的地8271018
TA贡献1796条经验 获得超4个赞
char c[]={'a','b','c'} ; 等价于 cha c[2]="ab";c[2]='c';
而不是 char c[] = "abc"; 这就是区别, 不知你能不能看得懂
- 3 回答
- 0 关注
- 96 浏览
添加回答
举报
0/150
提交
取消