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

比如chars[20]="Beijing",*P;答案上面说S数组的个数为7,P所指字符串长度为6为什么?不是有\0吗?还有如果是S[]没有20答案一样吗如果是’B‘'E... 比如char s[20]="Beijing",*P; 答案上面说S数组的个数为7,P所指字符串长度为6 为什么?不是有\0吗?还有 如果是S[ ]没有20 答案一样吗 如果是’B‘'E'I'J'I'N'G'是这样子答案有变化吗 麻烦了 疑惑很久了~~~~~~~~~~~~
P=S
展开
 我来答
naeux
2012-08-24 · TA获得超过765个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:75.3万
展开全部
首先,双引号” “表示内容为字符串,所以"Beijing“是字符串,而字符串后面会自动地跟上一个'\0'作为结束符,所以,当你将”Beijing“赋值给s[20]或者说s[]的时候,'\0'也跟着被赋值进去了。
而单引号‘ ’ 则表示内容为字符,所以当你把'B‘,'E','I','J','I','N','G'这样赋值给字符串s[]时,字符’\0‘是不会被赋值进s[]中的。
明白了上面所说的,那么就不难立即下面的结果了
1. char s[20]="Beijing" --------长度为7,数组个数为20,数组元素个数为8
2. char s[]="Beijing“ --------长度为7,数组大小为8,数组元素个数为8
3. s[]={'B‘,'E','I','J','I','N','G'} *------则因为后面不存在'\0',所以如果你输出printf("%s \n",s);这样输出的话,输出 BEIJING的后面还会有乱码存在,系统没有在BEIJING的后面发现'\0',认为字符串尚未结束,继续输出后面的内容,但是系统在后面没有分配char类型的地址内容,所以在输出后面乱码后,认为不再是字符串,就结束了字符串输出。因此,一般本人不建议这样定义字符串。建议使用第1,2种定义方法,或者根据需要 用 malloc() 方法 动态分配地址,使用指针进行赋值。

至于为什么你的那个指针p,这里,p是指向s数组的首地址的,所以,这里p的字符串长度应该是与s的字符串是相等的,也就是7。
veket的小号
2012-08-18 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3994万
展开全部
A、char s[20]="Beijing"; 字符数组元素个数 20 , 字符串长度 7

B、char s[]="Beijing"; 字符数组元素个数 8 , 字符串长度 7 最后一个是 '\0'

C、char s[]={'B', 'e', 'i', 'j', 'i', 'n', 'g'} 字符数组元素个数 7 , 字符串长度 × 没 '\0' 不是字符串

D、char s[8]={'B', 'e', 'i', 'j', 'i', 'n', 'g', '\0'} 字符数组元素个数 8 , 字符串长度7 有 '\0' 是字符串
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuanxiang001
2012-08-16 · 超过18用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:23.8万
展开全部
[20]="Beijing",*--------个数为7,长度为7,数组大小为20,
如果s[]="Beijing“--------个数为7,长度为7,大小为8
如果是
s[]={'B‘,'E','I','J','I','N','G'}则是个数、长度、大小都为7

\0算大小,不算长度
*p是从0开始算起,
所以*(p+0)=*p=p[0]=s[0]
追问
数组大小才算\0 长度和个数都不算? 那那个字符串长度为6错了是吗?
追答
"beijing" 是7个字母啊,只不过在数组中下表是从零开始的,但是算长度还是7
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式