我正在学习c,我对char字符串数组元素的size元素感到有些困惑。
举个例子:
char *states[] = {
"California", "Oregon",
NULL, "Texas"
};
我想知道如何获得数组的大小,所以我可以在for循环中计算它。我从某个站点找到了这个计算来获得数组的大小:
int size = sizeof(states) / sizeof(states[0]);
我有点困惑,为什么sizeof(states[0])
8个字节?
答案 0 :(得分:3)
你有一个指向字符的数组。数组的总大小为
<number of elements> * <number of bytes for a char pointer>
其中一个成员的大小是char指针的大小(系统上的8个字节)。这样就可以了:4*sizeof(char *)/sizeof(char *)
因此,数组中的元素数量。
要查看位置0处的字符串的长度,您需要:
strlen(states[0]);
这将为您提供您期望的10个。
答案 1 :(得分:1)
char *states[]
是一个字符指针数组。因此,数组中任何元素的sizeof都会给出一个指针的大小,在你的情况下恰好是8个字节。
答案 2 :(得分:1)
这是依赖于体系结构的行为。sizeof(states[0])
是字符指针的大小,因为states[0]
是字符指针。在你的机器中,char
指针的大小恰好是8
。因此输出。
如果您真的想要字符串的大小,那么最好在strnlen()
上使用states[0]
之类的内容。
答案 3 :(得分:1)
I'm a little confused, why is sizeof(states[0]) 8 bytes?
因为states是一个char指针数组。
所以,states[0]
是数组的第一个元素,在你的机器上我认为地址是8个字节。
这就是你获得8