gpt4 book ai didi

c - C 中各种字符串初始化的大小差异

转载 作者:行者123 更新时间:2023-11-30 20:12:43 25 4
gpt4 key购买 nike

我开始学习 C 语言,并遇到了一个找不到答案的问题。

当我初始化一个随机字符串时

char *str1 = "Big";
printf("size of str1: %ld\n", sizeof(str1));

当我执行 sizeof(str1) 时,它给我的大小是 8(字节) ,这对我来说没有意义。

当我初始化一个随机字符串时

char str2[] = "Big";
printf("size of str2: %ld\n", sizeof(str2));

当我执行 sizeof(str2) 时,它给我的大小为 4(字节) ,这对我来说有意义,因为三个字符 'B' , 'i' , 'g' ,和'\0' .

为什么第一个给我的是 8 号?

最佳答案

首先,当在指针上使用 sizeof 时,它会给出数据类型的大小,即指针本身,而不是数据类型的大小。 >分配或指向的内存位置。

所以,如果出现

char *str1 = "Big";

sizeof(str1) 将为您提供 str1 本身的大小,即 char * 的大小。这将根据您使用的平台和编译器而有所不同,例如,对于 32 位,它将是 4,对于 64 位,它将是 8,通常

那么,

 char str2 = "Big";

无效。如果你的意思是

 char str2[] = "Big";

在这种情况下,str2 是一个数组,由提供的字符串和空终止符初始化。因此,总大小将为 4 * sizeof(char),即 4。

关于c - C 中各种字符串初始化的大小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34505149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com