有以下程序 #include 〈string.h〉 main ( ) { char p[]={'a','b ,'c'}, q[10]={'a','b','c'}; printf("%d %d\n",strlen(p),strlen(q)); } 以下叙述中正确的是
A.在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B.由于p数组中没有字符申结束符,长度不能确定;但q数组中字符串长度为3
C.由于q数组中没有字符串结束符,长度不能确定:但p数组中字符串长度为3
D.由于p和q数组中都没有字符串结束符,故长度都不能确定
参考答案:B
解析: 本题考查了对字符数组赋初值.使用初始化列表对字符数组赋初值,系统不会自动为其添加字符串结束符,使用字符串初始化时才会自动添加,所以选项A是错的。数组长度在未指定的情况下由初始化列表项中数据的个数决定,若已指定且初始化项数不足时,多出部分会自动初始化为0,0等价于字符串结束符'\0'。所以选项B是正确的,C和D都是错误的。本题应该选B。