首页 > 试题广场 >

char str[]="Hello", sizeof(str

[单选题]
在32位机器上,char str[]="Hello", sizeof(str) = ()
  • 4
  • 5
  • 6
  • 8
推荐
答案:C
实际存储为{'H','e','l','l','o','\0'},所以是6个
编辑于 2015-02-05 10:33:09 回复(5)
sizeof计算长度包括字符串结束符\0
strlen不包括
发表于 2016-06-27 14:24:00 回复(4)
#include "stdio.h"

int main() {
    char str[] = "hello";
    char *s = "hello";
    int a[] = {3, 5, 7};
    printf("%d\n%d\n%d\n", sizeof(str), sizeof(s), sizeof(a));//输出6, 4, 12
    return 0;
}

发表于 2015-09-07 14:55:20 回复(9)
sizeof 函数求得是占据内存大小
strlen 函数求的是实际长度
一般来说 strlen <= sizeof
在C中,字符串定义有两种方法:一是利用字符数组,二是利用字符指针
  • 利用字符数组定义:

char str[] = "hello" 或者是 char str[] = {"hello"}
这种定义方法,系统会自动的在字符串的末尾加上字符串结束符,即'\0',所以

sizeof(str) = 6, 而 strlen(str) = 5;
还有一种定义方法,就是明确字符串的大小,但在定义的时候确定的大小和定义时字符串大小不一致

char str[10] = "hello" -> sizeof(str) = 10, strlen(str) = 5;
char str[10] = "0123456789" -> 报错
这是因为明确字符串大小的时候,需要给字符串预留一个空位来存放'\0',所以定义长度为10的字符串的时候,最多只能初始化9个位置,最后一个位置用来放 '\0'.

另外还有一种定义方法
char str[] = {'h', 'e', 'l', 'l', 'o'}; 或
char str[5] = {'h', 'e', 'l', 'l', 'o'};  
sizeof(str) = 5;
strlen(str) = 5;
这种定义方法就可以有五个空位就可以放进去五个元素,但是如果这样定义,系统就不会自动在字符串后面加结束符 '\0' 了。并且strlen函数其实是没办法求得长度的,因为字符数组里没有 '\0' 结束符。
  • 用字符指针定义时,只能采取字符串的方式进行初始化:
char *str = "hello";
sizeof(str) = 6;
strlen(str) = 5;
该方法是自动加上了字符串结束符的。
发表于 2017-02-24 19:46:58 回复(2)
C.6
str[]会隐含一个'\0',sizeof()时会计算该字符,故结果为6
发表于 2015-01-05 11:24:18 回复(0)
数组名相当于一个指针常量,直接使用sizeof()运算符对数组名操作会得到数组大小,但是如果把数组名作为参数传入函数中,数组名会自动转换成指针,在函数内使用sizeof()就会得到指针的大小
发表于 2016-09-23 09:17:50 回复(0)
前面有个空格啊
发表于 2015-10-09 23:52:01 回复(2)
实际存储为{'H','e','l','l','o','\0'},所以是6个
sizeof计算长度包括字符串结束符\0
发表于 2022-04-12 14:16:05 回复(0)
注意char str[] = {'a','b'};和char *str = {'a','b'}中求sizeof(str)的区别,前者是求数组所占内存空间,后者是元素地址空间
发表于 2017-06-01 19:15:44 回复(0)
记得数组名使用sizeof时,计算的是数组大小(注意算上隐藏`/0`占的坑位),而不是指针大小~
发表于 2021-04-11 17:13:50 回复(0)
用数组时候就是数组所占空间了,数组长*数据类型所占空间。 用指针时候就是指针变量所占空间了,32位上是4字节,64位上是8字节。
发表于 2019-03-27 09:52:14 回复(0)
sizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占的字节个数。
对于 ”Hello”,  结尾还有“\0”. 所以是6.

发表于 2016-04-01 17:13:26 回复(0)
“”会自动变成一个\0(即字符串结束),占一个位置,所以一共6个
编辑于 2021-11-10 23:48:53 回复(0)
就我看到H前面有一个空格吗?
发表于 2018-12-03 13:07:49 回复(0)
本来想说java里面'\0'不占位的,但是发现java里根本就不会用char来声明字符串啊
发表于 2018-04-15 16:49:38 回复(0)
char str[]类型为数组
char*str类型为指针
发表于 2023-03-19 16:41:14 回复(1)
sizeof计算字符串长度时会计算结束符"\0",strlen计算字符串长度时不包括
发表于 2022-04-10 12:44:04 回复(0)
前面有空格啊,你们没看见?
发表于 2017-02-18 09:36:54 回复(0)
 数组有\0   字符串没有
发表于 2016-08-16 20:17:38 回复(1)
sizeof计算字符串包括结束字符串`/0` strlen不包括
发表于 2023-12-19 19:13:23 回复(0)
数组名相当于一个指针常量,直接使用sizeof()运算符对数组名操作会得到数组大小,但是如果把数组名作为参数传入函数中,数组名会自动转换成指针,在函数内使用sizeof()就会得到指针的大小
发表于 2023-07-23 05:52:04 回复(0)