我开始学习 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/