首页 > 试题广场 >

以下叙述正确的是

[单选题]
对两个字符 a 和 b 进行初始化,
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
则以下叙述正确的是()
  • a数组比b数组长度长
  • a与b用sizeof取长度值相同
  • a与b数组完全相同
  • a和b中都存放字符串
推荐
【正确答案】A
【解析】a 是一个 C 风格的字符串,字符串以 \0 结尾,所以 sizeof(a) 是获取数组的大小(包含\0)为 7,b 是一个普通的字符数组,所以 sizeof(b) 结果为 6。
strlen() 是获取字符串的长度,它是以 \0 作为结束标志,所以 strle(a) 结果为 6(不包含 \0),b 中没有 \0,所以 strlen(b) 结果不确定。

C++ 字符串知识点讲解】
更多C++基础专业知识讲解,点击链接即可查看
https://www.nowcoder.com/link/zxyl-cpp40
编辑于 2021-11-17 15:53:07 回复(0)
题目说的是长度,应该是strlen(),对a求长度为6,但是对b求长度是一个未知的大小,应该strlen()知道遇到'\0'才停止,所以a,b之间的长度不能比较,sizeof是大小,sizeof(a)=7,sizeof(b)=6,应该把题目的长度换成大小

发表于 2015-09-19 10:17:57 回复(3)
用字符串方式赋值比用字符逐个赋值要多占一个 字节 , 用于存放字符串结束标志'\0'
发表于 2015-08-13 13:55:44 回复(0)
LV8头像 LV8
因为 char b[]={'A','B','C','D','E','F'}; 没有字符串结束符,所以 strlen 的时候,会一直往后找,直到遇到 '\0', b 找不到,就延着地址往上找,就把 a 的也算进去了,所以打印 strlen(b) 的结果是 12, printf b 的结果是 ABCDEFABCDEF。 
做修改  char b[]={'A','B','C','D','E','F', '\0'};  这样就一致了
发表于 2015-08-22 23:58:59 回复(3)
以字符串方式赋值结尾会有一个'\0',因此内存要加1,即sizeof(a)=7,sizeof(b)=6;
长度依据'\0'判断,遇到即停,因此strlen(a) = 6, 由于b中无'\0',故strlen(b)不确定;
发表于 2021-01-07 13:56:30 回复(0)
#include <stdio.h>
int main()
{
char a[]="ADCDEF";
char b[]={'A','B','C','D','E','F'};
int size_a = sizeof(a);
int size_b = sizeof(b);
int len_a = strlen(a);
int len_b = strlen(b);
printf("size_a=%d\n",size_a);
printf("len_a=%d\n",len_a);
printf("size_b=%d\n",size_b);
printf("len_b=%d\n",len_b);
return 0;
}


准确的讲,求字符串长度应该用strlen,求数组长度应该用sizeof;如果都用sizeof取长度的话a数组比b长;如果都用strlen取长度的话则b比a长;strlen(b)=12难道是因为字符后面自带了‘\0’?gcc和g++编译器都是12。
发表于 2018-03-11 00:40:34 回复(2)
sizeof(a)=7,sizeof(b)=6; 
strlen(a) == strlen(b) = 6;

发表于 2015-09-04 19:13:03 回复(0)
1。首先Java中不能这样赋值。
2.C++中可以这样赋值,然后,就是字符串后面有一个自动添加的  /0  用来表示字符串的结束标记。
发表于 2015-08-22 18:03:05 回复(0)
字符数组和字符串的区别
发表于 2020-01-06 19:52:31 回复(0)
数组的长度应该是数组中元素的个数吧。a用字符串初始化,会在末尾赋'\0'.长度为7.而b中直接用元素初始化,元素个数是6,长度为6.
发表于 2016-09-10 16:41:47 回复(0)
a和b中存放的不是字符串是什么?
发表于 2015-09-25 10:39:24 回复(0)
char a[]="ABCDEF";
字符串以\0结尾
char b[]={'A','B','C','D','E','F'};
字符数组

sizeof()  获取数组大小,包含\0
strlen() 获取字符串长度,以\0为结束标志,不包含\
发表于 2024-04-25 09:44:38 回复(0)
题目出的不严谨,应该要说明使用sizeof运算符进行计算。
发表于 2020-10-23 17:02:47 回复(0)
发表于 2018-03-22 22:11:00 回复(0)
a不一定比b的长度长。
发表于 2023-09-22 10:48:08 回复(0)
用字符串方式赋值比用字符逐个赋值要多占一个 字节 , 用于存放字符串结束标志'\0'
发表于 2022-05-16 20:24:47 回复(0)
b
发表于 2022-05-10 16:42:09 回复(0)
我怎么没搞懂 A :不是比较a和b的长度吗 用的是strlen,  strlen(a) = 7  ,strlen(b)=随机值
发表于 2022-04-02 12:17:25 回复(0)
虽然做对了..但是C++里定义用char类型定义的时候如果是用字符数组定义的话不是需要在结尾手动加上'\0'以方便编译器编译吗?。。
发表于 2022-01-16 21:41:48 回复(0)
对于字符数组的初始化,使用“”样式时候,注意系统后面会自动添加`\0`的~
发表于 2021-04-04 16:02:17 回复(0)
strlen遇到’\0’才停止;而单个赋值不会自动加结束符导致长度不确定
发表于 2021-03-24 18:16:10 回复(0)