为了账号安全,请及时绑定邮箱和手机立即绑定

我指的“系统”是VC,在Turbo C下运行char p[]={'a','b','c'}就没问题!!

我指的“系统”是VC,在Turbo C下运行char p[]={'a','b','c'}就没问题!!

C C++
泛舟湖上清波郎朗 2023-03-15 17:13:54
#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',所以赋值最好用字符串,即方便,系统又会自动加结束符,希望能够帮到您。

查看完整回答
反对 回复 2023-03-18
?
largeQ

TA贡献2039条经验 获得超7个赞

输出结果是不确定的,因为你的char数组不存在末尾的'\0'
正确的初始化方式应该是:char c[] = "abc"; 

补充:
只有字符串形式的初始化,编译器才会帮你在某位补零
你用的那种方式,得到数组长度就是3,哪里来有位置补零呢?

查看完整回答
反对 回复 2023-03-18
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

char c[]={'a','b','c'} ; 等价于 cha c[2]="ab";c[2]='c';
而不是 char c[] = "abc"; 这就是区别, 不知你能不能看得懂

查看完整回答
反对 回复 2023-03-18
  • 3 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信