首先,双引号” “表示内容为字符串,所以"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。
温馨提示:答案为网友推荐,仅供参考