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

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

首先,双引号” “表示内容为字符串,所以"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。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-18
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' 是字符串本回答被网友采纳
第2个回答  2012-08-16
[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

相似回答