C语言字符串的长度和大小的几个问题

为什么len1长度是11,len4长度是7

这个是ch4少一个斜杠,ch4里也是\0看作一个字符吗?还是最后面没有自动加\0

字符串以'\0'表示结束,"he\0llo" \0字符中就结束了,长度为2
"he\\0llo" ,双引号字符串自动加上'\0'结束符,\\表示'\'字符共有'h' ,'e','\','0','l','l' ,'o'七个字符,长度为7
ch1[]={'h','e','l','l','o'} 不会自动加上'\0',测试长度时直到遇到内存中第一个’\0'结束,长度不固定,如果重新编译程序运行长度就不一定是11
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-21
一、he\\0llo 这里斜杠被转义了,就一个斜杠,0还是字符0 所以,len4长度是7
二、he\0llo 这里\0是一个字符:字符串结束符!
三、len1是11是巧合,原因是你按字符对数组进行初始化,又没有定义数组长度,所以ch1只有五个字符,而strlen()求串长,是要找到一个\0才结束的!所以,strlen(ch1)结果是不确定的!
第2个回答  2014-12-21
关于char4第一项,因为\是一个转义字符,所有他不会被统计,而经过\转移之后,第二个\就是一个斜杠的字符了,所以第一个为7个,而第二个因为你把一个斜杠去掉之后,只有一个转义字符\ 然后加上一个0就等于字符串的结束符号\0 ,所以第二次的长度是2 关于char1 你最好把这个字符串输出来printf(“%s\n”, ch1),看看他到底是什么
第3个回答  2014-12-21
len1长度是不确定的,什么时候碰到'\0'才算结束。因为ch1[]不是字符串而是字符数组,而strlen是测字符串长度的,这里用法就错了。
len4是ch4[]的长度,dh4[]的内容被编译器解释为h、e、\、0、l、l、o、'\0',其中\是转义字符,所以\\才被解释为1个\。最后长度自然是7。例2中\0字符串就结束了,所以是2。系统不会把'\0'加到\0后面而是自动加到o后面。
sizdof不是函数,是操作符,用来计算系统为变量分配了多少个字节。比如有char a[100]="";,用strlen(a)测得是0,而用sizdof(a)计算结果是100,因为编译器为a分配了100个字节。所以,用sizeof来测量字符串长度的用法也是错误的。
第4个回答  2014-12-21
strlen是根据字符串结束标志\0判断长度的不算结尾\0如果中间有\0则就算到第一个\0处(len3,len4属于这种情况)的长度后面不算,如果像数组这种没用\0结束的那么长度应该是不确定的,会从开始算一直找到\0为止(后面就不是当前字符数组的内容len1就是这种情况),像“hello"这种字符默认结尾是有个\0的。
char ch1[]={'h','e','l','l','o'}这种没用结束符\0的strlen长度不定,肯定不是5,
sizeof 是根据实际有多个字符,即占用多少空间算"hello"结尾\0也算进去故为6,所有size2,size3都为6.

这个是ch4少一个斜杠,ch4里也是\0看作一个字符吗?还是最后面没有自动加\0
---这个\0是算个字符,结尾的那个也算故第一个size4为8.

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网