C语言关于数组元素个数和字符串长度的问题~~~~~~~

比如char s[20]="Beijing",*P; P=S; 答案上面说S数组的个数为7,P所指字符串长度为6 为什么?不是有\0吗?还有 如果是S[ ]没有20 答案一样吗 如果是’B‘'E'I'J'I'N'G'是这样子答案有变化吗 麻烦了 疑惑很久了~~~~~~~~~~~~ 答案错了吗
那就这道题char s[20]="Beijing 来说 字符串长度和数组个数还有数组长度和占据内存长度 有谁能给个答案吗 如果是’B‘'E'I'J'I'N'G 4个答案哪个有变化

给你介绍几点个人浅薄认识吧:
s[20]中20是主要用来申请空间的,表示该字符串数组要20*sizeof(char)空间
char s[20]="Beijing"表示用字符串Beijing来初始化该字符数组
对于字符串默认后面是跟有\0来表示字符串的结束,但是不算入字符串长度中
所以你这里strlen(s)=7 数组个数为7
P所指字符串长度为6 =》 这个个人也不理解,我认为应该也是7,因为它指向的是s的首地址

如果是S[ ]没有20 答案一样吗
对你的问题数组个数 p所指字符串长度应该一样
不一样在于,它默认申请的空间也就是字符串的长度,所以如果你后面有操作
s[10]='a'类似的有20是正确的,没有20就访问越界了

如果是’B‘'E'I'J'I'N'G'是这样子答案有变化吗
不知道你是指怎么赋值
如果是按照s[0]='B';s[1]='E';…… 如果不加上s[7]='\0'的话结果很难说,肯定是有变化的,7之后的内存会访问原来存在的数据。这就要看s[20]是否开始初始化了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-17
占据的内存跟你数据类型有关,比如你定义一个int数组,有10个元素,那占据的内存就是10*sizeof(int)。
第2个回答  推荐于2017-11-25
字符串长度是7,\0占据空间但是不算长度。
s[]没有20答案一样,p所指字符串长度也是7。
如果是’B‘'E'I'J'I'N'G'这个样子长度就不确定了,因为没有\0作为结束符,字符串是以\0为结束标志,找不到\0会越界访问,结果未知。

数组数据个数=数组长度;
占据内存=sizeof(数组元素类型)*数组长度;
上面那个数组长度为20。追问

数组长度为20 数组个数为7是吗?如果是S[ ] 那就是数组长度为7 个数也为7是吗? 如果’B‘'E'I'J'I'N'G'有\0做结束符 那数组长度是8 字符串是7是吗?

追答

长度为20,元素个数就是20;
如果是s[]="Beijing",长度为8,个数也是8,因为\0也占内存;
如果’B‘'E'I'J'I'N'G'有\0做结束符,数组长度为8, 字符串长度7。

追问

那就是答案上面说数组个数为7 字符串长度为6都不对是吧 应该是20和7 吗?

追答

是的,字符串长度用strlen()一下就验证了

本回答被提问者采纳
第3个回答  2012-08-17
char s[20]:分配20个char空间,
"beijing”字符串含有‘\0’作结束的的字符共有8个char,
赋值时,依次从0-7拷贝,数组空间不够时会溢出。
字符串有效长度是不含结束符'\0'的所有字符,
strlen函数统计字符数组有效长度时,是按第一个遇到的'\0'计算的。

就上面的问题:s数组有20 char空间,即长度20,字符串长度为7,字符串共有字符8个。

如果beijing按字符依次赋值,由于没有结束符‘\0’,此时
s数组有20 char空间即长度20,存有字符7个,
没有结束符‘\0’
strlen 由于函数没法使用。
不能整体输出字符串了,只能用循环依次输出,或强制在结尾处加上结束符再整体输出。
第4个回答  2012-08-17
字符串长度是不包括\0的

相关了解……

你可能感兴趣的内容

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