char[]p="abc";char[]q={'a','b','c'};问:sizeof(p)跟sizeof(q)的值以及strlen(p)和strlen(q)

请说下,char[]p="abc";char[]q={'a','b','c'};问:sizeof(p)跟sizeof(q)的值以及strlen(p)和strlen(q)的值?
最新回答
巷尾青苔

2024-10-13 07:20:12

char p[]="abc";相当于char p[4]="abc"; 其中p[0]='a';p[1]='b';p[2]='c';p[3]=0;
char q[]={'a','b','c'};相当于char q[3]={'a','b','c'};
sizeof(p)等于4,sizeof(q)等于3,返回的是数组实际元素个数
strlen(p)由于p中最后一个单元取值是0表示字符串结束,所以会返回字符个数3
strlen(q)由于q数组中没有字符串结束的0,所以返回值取决于数组后面的数据出现0的位置,但应该大于等于3
追问
对于你的回答,我受益良多啊,strlen是求字符串长度的,而char[]q 没有\0,也就是没结束符对吧,从定义来看,嗯
追答
对的,字符串必须以0或字符'\0'结束
豆芽没营养

2024-10-13 06:36:20

sizeof(p)跟sizeof(q)的值 ----数组内存大小 前者4(包含结束符),后者为3
strlen(p)和strlen(q)的值?----字符串长度,前者为3, 后者因为没有结束符,计算出来的结果为不确定值
做梦的季节

2024-10-13 07:40:05

sizeof(p) = 4, sizeof(q) = 3

strlen(p) = 3, strlen(q) = 3

因为p中同时存了一个"\0"的空字符在最后。
谢谢
追问
那么你试试strlen(q)是不是3,我得出的是6
°小可爱

2024-10-13 07:02:32

char[]q={'a','b','c'};
char[]p

我说,这能编译过吗??
追问
可以的啊 ,char[]p只是没规定大小而已,可以编译
追答
亲,那应该定义成这样 charp[].............你把数组的基维给省略了,那能好使吗?