首页 > 试题广场 >

在32位系统中,下列表达式的值分别是?

[填空题]
在32位系统中:
char arr[] = {4, 3, 9, 9, 2, 0, 1, 5};
char *str = arr;
sizeof(arr) = 1;
sizeof(str) = 2;
strlen(str) = 3;


推荐
答案:8,4,5(已实测)
sizeof(arr)求出了为arr的长度乘以arr类型所占的字节数,这里arr是char型的,每个数据占一个字节,所以sizeof(arr)得到8

sizeof(str)这里str是字符指针,32为系统中指针占4个字节,所以为4

strlen(str)求字符串长度,这里的字符串由字符数组得到,字符数组中赋值的是字符的ASCII值
其中ASCII值为0的代表字符中的‘\0’也就是字符串结束的标志,所以得到的长度为5
编辑于 2015-01-17 11:13:53 回复(4)
注意ASCII为0的值表示的是‘\0’

发表于 2016-02-06 16:37:51 回复(0)
sizeof(arr)    8 => char类型占字节数1 * 数组长度 8.
sizeof(str)    4 => 指针类型占内存字节数 = 位数/8 = 32/8 = 4.
strlen(str)     字符串长度 5 (以'\0'为结尾,不包括'\0','0'与'\0'的ASCII相同,同样视为结束标记).
编辑于 2019-03-14 12:27:34 回复(0)
strlen在求长度的时候,遇到 \0 为结束标志,此题的数组为字符数组,而其中有0这个元素,char类型0应为 \0 ,strlen在遇到这个元素的时候就以为到了最后,所以长度为5
发表于 2017-03-23 22:44:14 回复(0)
char arr[] = { '3', '9'};
cout << strlen(arr);
有没有大神解释一下这个输出的值

发表于 2016-08-25 11:29:08 回复(4)
char a[] = "abcde";
char arr[] = { 4, 3, 9, 9, 2, 0, 1, 5 };
cout << sizeof(a)<<endl;//=6
cout << sizeof(arr) << endl;//=8
cout << strlen(a);//5
发表于 2015-12-20 15:47:38 回复(1)
char类型,8个元素;
(1)sizeof(arr)=8*1=8;
str是指针,32位系统
(2)sizeof(str)=4;
求strlen时遇到‘\0’结束,数字0和‘\0’是一样的,所以到0结束(不包括0)
(3)strlen(str)=5;
发表于 2017-07-07 09:40:16 回复(0)
sizeof(arr)表示求数组所占空间的字节数,这里1*8=8
sizeof(str),str是指针,32位操作系统,指针大小是32/8=4个字节
strlen(str),表示求字符串长度,这里字符串由字符数组得到,字符数组赋值的是字符的ASC11码,但是asc为0的值表示的是‘\0’,但是strlen就是以'\0'为结束符的,所以为5
发表于 2015-08-23 09:58:51 回复(0)
数组中有0啊。。。。。。。。没注意--_--
发表于 2017-05-03 08:40:48 回复(0)
这道题前两个应该没什么问题,重要的是第三个,重点考察是否知道:ASCII值为0的代表字符中的‘\0’也就是字符串结束的标志!
发表于 2016-11-30 09:28:46 回复(0)
char的值不能为0啊。。。醉的不要不要的。。当char为0就变身\0了
发表于 2016-11-11 13:56:45 回复(0)

#include <stdio.h>
#include<stdlib.h>

int main(void)
{
    char str[] = {4, 3, 9, 8, 2, 0, 1, 5};
    char str1[]="hello";
    char str2[10]={1,2,3,4,0};
    char *a=str;
    //这里很明显了,strlen是计算长度的,不把\0包括在内,而0数字带便的就\0,所以第一个数就是5
    //sizeof是计算元素的个数的,是计算大小的
    printf("%d\n",strlen(str));
    printf("%d\n",sizeof(str));

    printf("%d\n",strlen(str1));
    printf("%d\n",sizeof(str1));

    printf("%d\n",strlen(str2));
    printf("%d\n",sizeof(str2));

    printf("%d\n",sizeof(a));
}

发表于 2016-11-02 11:39:58 回复(0)
注意arr中放的的整型数值,也就是字符的ASCII码,0表示的字符为‘\0’,strlen遇到‘\0’结束
发表于 2016-10-06 20:33:18 回复(0)
做了2次,居然都没注意到strlen是在出现'\0'时结束,而0的ascii就是'\0'
发表于 2016-08-30 10:36:15 回复(0)

strlen(str)求字符串长度,这里的字符串由字符数组得到,字符数组中赋值的是字符的ASCII值
其中ASCII值为0的代表字符中的‘\0’也就是字符串结束的标志,所以得到的长度为5
发表于 2016-05-23 17:05:52 回复(0)
sizeof(arr) 求得不是字符串,是数组
发表于 2015-08-24 12:08:07 回复(0)
手机端看不到第三个空?
发表于 2015-08-01 07:55:00 回复(0)
8 4 5
发表于 2015-01-22 10:59:26 回复(0)
8
4
5   这里有个陷阱。   数字0 会转成字符,就是'\0'

发表于 2015-01-14 16:41:52 回复(0)