我两本c语言教辅上的矛盾 关于一维数组与字符串

来源:百度知道 编辑:UC知道 时间:2024/05/18 03:33:26
我的其中一本书上
字符数组char c [5]={'c','h','i','n','a'};这明显是一个数组放了5个字符常量
可是另一本书上有一个例题
下列程序:
main()
{char p[]={'a','b','c'},q[10]={'a','b','c'}
printf (%d%d\n",strlen(p),strlen(q));
} 下列叙述正确的是 正确选项答案是:
在给p和q数组赋初值时 ,系统会自动添加字符串结束符,故长度是3

这个例子上又把这种形式当做字符串数组了 到底哪个对啊

这是字符方式存放{char p[]={'a','b','c'},q[10]={'a','b','c'}故系统不会自动添加字符串结束符 。长度分别是3和10.
#include"stdio.h"
main()
{
char p[]={'a','b','c'},q[10]={'a','b','c'};
printf("%d\n%d\n",sizeof(p),sizeof(q));
}
运行结果显示长度为:3
10

对一个元素的初始化,如:
char a[3]={"a","b","c"}是正确的;而char a[3]={"abc"}是不正确的,因为系统会自动在字符串后面加上"\o",这样就会大于数组定义的长度。
而 :char a[4]={"a","b","c"}等同于char a[4]={"a","b","c","\o"}
char a[ ]={"a","b","c"}等同于char a[3]={"a","b","c"}
所以:不能说把p[]={'a','b','c'}当成了字符串数组了

如果提供的初值个数与预定的的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度.
赋初值时系统会自动在其尾部加上"\0",再调用函数strlen时遇到"&