C语言,C++问题,字符串求长的strlen函数;

#include"stdio.h"#include"string.h"voidmain(){charc[]={'a','b','c'};printf("%d\n",str... #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',这时就不会出错。
我指的“系统”是指VC,在Turbo C下运行char p[]={'a','b','c'}就没问题!!
展开
 我来答
贼寇在何方
2011-01-03 · TA获得超过770个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:713万
展开全部
输出结果是不确定的,因为你的char数组不存在末尾的'\0'
正确的初始化方式应该是:char c[] = "abc";

补充:
只有字符串形式的初始化,编译器才会帮你在某位补零
你用的那种方式,得到数组长度就是3,哪里来有位置补零呢?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
doujiangwutang
2011-01-03 · TA获得超过969个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:120万
展开全部
楼上说的有道理,如果您的空白内存单元比较多的话,那么在数组最后一个元素'c’之后可能是'\0',那么正好结束strlen函数,而输出3,我刚把您的代码复制过去,运行了下是3,以前我也不明白为什么,有的时候正确,有的时候错误,原因就是没有在数组即字符串末尾加'\0',所以赋值最好用字符串,即方便,系统又会自动加结束符,希望能够帮到您。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dark___templar
2011-01-04 · TA获得超过280个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:281万
展开全部
输出结果是不确定的,你没有显式在数组中声明 '\0'
你直接printf("%s", c) 得到的字符串是 abc烫烫 这样的形式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhao61
2011-01-03 · TA获得超过1459个赞
知道小有建树答主
回答量:1065
采纳率:0%
帮助的人:870万
展开全部
你这个用法就有问题
规范的两种用法
要么char c[4]={'a','b','c'}; 必须指定长度,否则会出错
要么char c[]="abc" 这个自动运行库就会在末尾加/0

不信你运行下strlen是不是对的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-01-03
展开全部
char c[]={'a','b','c'} ; 等价于 cha c[2]="ab";c[2]='c';
而不是 char c[] = "abc"; 这就是区别, 不知你能不能看得懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式