0

重複の可能性:
C -> sizeof string は常に 8

私がそうするならsizeof("HELLO");、私は期待されている6を取得しますが、私が持っている場合:

void printLength(char *s) {
    sizeof(s);
}

この関数に「Hello」を渡すと、sizeof8 が返されます。

どうしてこれなの?

4

3 に答える 3

6

あなたが得ているのはのサイズですchar *。実際の長さを取得するには、を使用しますstrlen

于 2012-07-31T21:55:51.917 に答える
4

変わらない。配列はポインタではありません。 sizeof("HELLO")char配列{'H','E','L','L','O','\0'}のサイズsizeof(s)を示し、はポインタのサイズを示します。

于 2012-07-31T21:56:05.273 に答える
3

固定サイズであると宣言された文字列リテラルと配列は特別に扱われるためです。コンパイラは、それらの大きさを正確に認識しています。

あなたの関数では、コンパイラが知っているのは、それが何かへのポインタであることだけです。あなたは文字ポインタのサイズを取っています(その時点で、コンパイラはそれについて知っているすべてです)。64ビットシステムを使用しているため、関数に何をフィードしても、8バイトのポインターを取得します。

これを行うためのライブラリ関数があります。

#include <string.h>

int getLength(char * str)
{
    return strlen(str);
}
于 2012-07-31T21:59:28.223 に答える