char字符串数组元素的大小是多少?

时间:2012-11-30 12:36:28

标签: c sizeof

我正在学习c,我对char字符串数组元素的size元素感到有些困惑。

举个例子:

char *states[] = {
    "California", "Oregon",
    NULL, "Texas"
};

我想知道如何获得数组的大小,所以我可以在for循环中计算它。我从某个站点找到了这个计算来获得数组的大小:

int size = sizeof(states) / sizeof(states[0]);

我有点困惑,为什么sizeof(states[0]) 8个字节?

4 个答案:

答案 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

的原因