C语言关于数组元素个数和字符串长度的问题~~~~~~~
比如chars[20]="Beijing",*P;P=S;答案上面说S数组的个数为7,P所指字符串长度为6为什么?不是有\0吗?还有如果是S[]没有20答案一样吗如果是’...
比如char s[20]="Beijing",*P; P=S; 答案上面说S数组的个数为7,P所指字符串长度为6 为什么?不是有\0吗?还有 如果是S[ ]没有20 答案一样吗 如果是’B‘'E'I'J'I'N'G'是这样子答案有变化吗 麻烦了 疑惑很久了~~~~~~~~~~~~ 答案错了吗
那就这道题char s[20]="Beijing 来说 字符串长度和数组个数还有数组长度和占据内存长度 有谁能给个答案吗 如果是’B‘'E'I'J'I'N'G 4个答案哪个有变化 展开
那就这道题char s[20]="Beijing 来说 字符串长度和数组个数还有数组长度和占据内存长度 有谁能给个答案吗 如果是’B‘'E'I'J'I'N'G 4个答案哪个有变化 展开
5个回答
展开全部
给你介绍几点个人浅薄认识吧:
s[20]中20是主要用来申请空间的,表示该字符串数组要20*sizeof(char)空间
char s[20]="Beijing"表示用字符串Beijing来初始化该字符数组
对于字符串默认后面是跟有\0来表示字符串的结束,但是不算入字符串长度中
所以你这里strlen(s)=7 数组个数为7
P所指字符串长度为6 =》 这个个人也不理解,我认为应该也是7,因为它指向的是s的首地址
如果是S[ ]没有20 答案一样吗
对你的问题数组个数 p所指字符串长度应该一样
不一样在于,它默认申请的空间也就是字符串的长度,所以如果你后面有操作
s[10]='a'类似的有20是正确的,没有20就访问越界了
如果是’B‘'E'I'J'I'N'G'是这样子答案有变化吗
不知道你是指怎么赋值
如果是按照s[0]='B';s[1]='E';…… 如果不加上s[7]='\0'的话结果很难说,肯定是有变化的,7之后的内存会访问原来存在的数据。这就要看s[20]是否开始初始化了
s[20]中20是主要用来申请空间的,表示该字符串数组要20*sizeof(char)空间
char s[20]="Beijing"表示用字符串Beijing来初始化该字符数组
对于字符串默认后面是跟有\0来表示字符串的结束,但是不算入字符串长度中
所以你这里strlen(s)=7 数组个数为7
P所指字符串长度为6 =》 这个个人也不理解,我认为应该也是7,因为它指向的是s的首地址
如果是S[ ]没有20 答案一样吗
对你的问题数组个数 p所指字符串长度应该一样
不一样在于,它默认申请的空间也就是字符串的长度,所以如果你后面有操作
s[10]='a'类似的有20是正确的,没有20就访问越界了
如果是’B‘'E'I'J'I'N'G'是这样子答案有变化吗
不知道你是指怎么赋值
如果是按照s[0]='B';s[1]='E';…… 如果不加上s[7]='\0'的话结果很难说,肯定是有变化的,7之后的内存会访问原来存在的数据。这就要看s[20]是否开始初始化了
展开全部
占据的内存跟你数据类型有关,比如你定义一个int数组,有10个元素,那占据的内存就是10*sizeof(int)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串长度是7,\0占据空间但是不算长度。
s[]没有20答案一样,p所指字符串长度也是7。
如果是’B‘'E'I'J'I'N'G'这个样子长度就不确定了,因为没有\0作为结束符,字符串是以\0为结束标志,找不到\0会越界访问,结果未知。
数组数据个数=数组长度;
占据内存=sizeof(数组元素类型)*数组长度;
上面那个数组长度为20。
s[]没有20答案一样,p所指字符串长度也是7。
如果是’B‘'E'I'J'I'N'G'这个样子长度就不确定了,因为没有\0作为结束符,字符串是以\0为结束标志,找不到\0会越界访问,结果未知。
数组数据个数=数组长度;
占据内存=sizeof(数组元素类型)*数组长度;
上面那个数组长度为20。
更多追问追答
追问
数组长度为20 数组个数为7是吗?如果是S[ ] 那就是数组长度为7 个数也为7是吗? 如果’B‘'E'I'J'I'N'G'有\0做结束符 那数组长度是8 字符串是7是吗?
追答
长度为20,元素个数就是20;
如果是s[]="Beijing",长度为8,个数也是8,因为\0也占内存;
如果’B‘'E'I'J'I'N'G'有\0做结束符,数组长度为8, 字符串长度7。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char s[20]:分配20个char空间,
"beijing”字符串含有‘\0’作结束的的字符共有8个char,
赋值时,依次从0-7拷贝,数组空间不够时会溢出。
字符串有效长度是不含结束符'\0'的所有字符,
strlen函数统计字符数组有效长度时,是按第一个遇到的'\0'计算的。
就上面的问题:s数组有20 char空间,即长度20,字符串长度为7,字符串共有字符8个。
如果beijing按字符依次赋值,由于没有结束符‘\0’,此时
s数组有20 char空间即长度20,存有字符7个,
没有结束符‘\0’
strlen 由于函数没法使用。
不能整体输出字符串了,只能用循环依次输出,或强制在结尾处加上结束符再整体输出。
"beijing”字符串含有‘\0’作结束的的字符共有8个char,
赋值时,依次从0-7拷贝,数组空间不够时会溢出。
字符串有效长度是不含结束符'\0'的所有字符,
strlen函数统计字符数组有效长度时,是按第一个遇到的'\0'计算的。
就上面的问题:s数组有20 char空间,即长度20,字符串长度为7,字符串共有字符8个。
如果beijing按字符依次赋值,由于没有结束符‘\0’,此时
s数组有20 char空间即长度20,存有字符7个,
没有结束符‘\0’
strlen 由于函数没法使用。
不能整体输出字符串了,只能用循环依次输出,或强制在结尾处加上结束符再整体输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询