首页 > 试题广场 >

已有定义:char a[]="xyz",b[]={'x','

[单选题]

已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是 ()(长度使用sizeof比较)

  • 数组a和b的长度相同
  • a数组长度小于b数组长度
  • a数组长度大于b数组长度
  • 上述说法都不对
经VC 6.0调试 a数组的长度为4 b数组长度为3 我觉得可能是因为a是字符串 ,编译器会给最后一个位置加上╲0用来表示字符串的终止,这样的初始化等价于b[]={'x','y','z','╲0'} 如有不当,欢迎矫正
发表于 2017-08-28 07:51:43 回复(3)
更多回答
sizeof和strlen的区别是:
sizeof的大小在你定义数据类型的时候就决定了;而strlen是求字符串的长度,根据你所输入的内容决定,strlen以\0为结束标志比如"xyz",实际上隐藏了\0,那么strlen可以读取,strlen只能读取有\0的字符串,如果没有就不行,'x','y','z',strlen是不能读取的,必须要加上'\0'例如:{‘’x','y','z','\0'}
本题需要特别注意的是:  本题与strlen一点关系都没有
a[],b[]这两个数组它的大括号里面并没有指明这个数组的大小。那么sizeof在计算的时候就会计算其中的实际字符内容的长度(包括'\0'),如果是字符串“xyz”,在c语言中字符串是以'\0'结尾的,sizeof就会将\0计算进去,所以长度为4,而‘x’,'y','z',是字符,没有\0作为末尾,所以它的长度是3,因此本题选C。


发表于 2022-08-02 10:38:30 回复(0)
这种题目啊,你就不能指明是strlen还是sizeof麽?一个长度你很容易引起误解额,本题暗指的是sizeof
发表于 2018-07-22 13:00:45 回复(2)
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
   char a[]="xyz",b[]={'x','y','z'};
    cout << strlen(a) << endl;    
    cout << strlen(b)<< endl;
    cout << sizeof(a)<< endl;
    cout << sizeof(b)<< endl;
   return 0;
//输出3 6 4 3
}
发表于 2018-08-23 18:58:02 回复(6)
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
   char a[]="xyz",b[]={'x','y','z'};
    cout << strlen(a) << endl;   
    cout << strlen(b)<< endl;
    cout << sizeof(a)<< endl;
    cout << sizeof(b)<< endl;
   return 0;
}
结果:3 7 4 3
b[]={'x','y','z'}  //长度未知,因为数组最后没有结束符'\0',不知道后面什么位置有'\0',所以结果变成了7,不同的运行可能有不同的结果,所以未知
b[4]={'x','y','z'} 等价于 b[4]={'x','y','z','\0'} 等价于 b[]={'x','y','z','\0'}   //这样的话strlen长度为3
而a[]是个字符串,结尾有'\0',所以它的strlen为3 sizeof操作符返回的是参数所占的内存大小,a[]是字符串,包含结束符'\0',所以是4个内存大小,而b[]是字符数组,有三个元素,所以为3个内存大小

发表于 2021-03-05 15:59:58 回复(1)
这题目错了,长度的话是strlen函数,a是字符串长度只能是3,而b是字符数组没有'\0'会一直找下去。a在b之前先定义,因为数组地址在栈空间,栈空间是自上而下的,所以a的地址在b之后,所以b应该找到a的'\0'才停止,所以b的长度应该a的加b的等于7
编辑于 2021-10-27 23:12:40 回复(0)
数据类型大小,a4b3
发表于 2022-04-12 13:36:00 回复(0)
本题指sizeof
发表于 2018-12-02 11:10:21 回复(0)
因为a是字符串,已""\0"作为结束标志,所以长度为4
发表于 2017-12-16 16:17:55 回复(0)
” xyz“表示为一个字符串,会默认的添加空字符
编辑于 2024-03-12 20:21:15 回复(0)
为了确定数组 `a` 和 `b` 的长度,我们需要理解 C 语言中字符数组的定义和 `sizeof` 运算符的行为。
1. `char a[] = "xyz";`
   - 这是一个字符数组的初始化,使用字符串字面量 "xyz"。字符串字面量在 C 语言中自动包含一个终止空字符 '\0'。因此,数组 `a` 实际包含四个字符:'x'、'y'、'z' 和 '\0'。所以 `sizeof(a)` 是 4。
2. `char b[] = {'x', 'y', 'z'};`
   - 这是另一个字符数组,通过一个字符列表初始化。这个数组只包含列表中的字符,没有自动添加的终止空字符。因此,数组 `b` 包含三个字符:'x'、'y' 和 'z'。所以 `sizeof(b)` 是 3。
因此,数组 `a` 的长度大于数组 `b` 的长度。选项 C 正确。
编辑于 2023-12-14 15:57:54 回复(0)
b[]元素个数已知,大小未写,就是说明这个数组大小是3,;a[]大小是4
发表于 2022-04-20 21:28:33 回复(0)
lj题目 自己都分不清长度和大小的概念
发表于 2021-09-11 12:48:33 回复(0)

b数组的方式最后有个/0,b的sizeof会更大


发表于 2020-02-10 19:44:58 回复(0)
这道题就算是用strlen也是b长度大于等于a。如果在vs上运行大概率b大于a
发表于 2019-09-26 18:10:05 回复(0)