2

私は現在cを学んでおり、char文字列配列要素のサイズ要素について少し混乱しています。

次の例を見てください。

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

配列のサイズを取得する方法を確認したかったので、for ループで数えることができました。配列のサイズを取得するために、いくつかのサイトからこの計算を見つけました。

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

少し混乱していますが、なぜsizeof(states[0])8 バイトなのですか?

4

4 に答える 4

3

文字へのポインタの配列があります。配列の合計サイズは

<number of elements> * <number of bytes for a char pointer>

メンバーの 1 つのサイズは、char ポインターのサイズ (システムでは 8 バイト) です。したがって4*sizeof(char *)/sizeof(char *)、配列内の要素の数です。

位置 0 の文字列の長さを確認するには、次のものが必要です。

strlen(states[0]);

これにより、期待する 10 が得られます。

于 2012-11-30T12:37:40.437 に答える
1
I'm a little confused, why is sizeof(states[0]) 8 bytes?

states は char ポインターの配列であるためです。

したがって、states[0]配列の最初の要素であり、あなたのマシンではアドレスは8バイトだと思います。

それがあなたが得ている理由です8

于 2012-11-30T12:54:35.577 に答える
1

char *states[]文字ポインタの配列です。したがって、配列の任意の要素の sizeof は、ポインターのサイズを示します。この場合、たまたま 8 バイトです。

于 2012-11-30T12:40:45.440 に答える
1

これはアーキテクチャに依存する動作です。sizeof(states[0])文字ポインターと同様に、文字ポインターのサイズですstates[0]。あなたのマシンでは、ポインターのサイズはcharたまたま8です。したがって、出力。

文字列のサイズが本当に必要な場合は、strnlen()onのようなものを使用することをお勧めしstates[0]ます。

于 2012-11-30T12:42:13.150 に答える