重複の可能性:
C -> sizeof string は常に 8
私がそうするならsizeof("HELLO");
、私は期待されている6を取得しますが、私が持っている場合:
void printLength(char *s) {
sizeof(s);
}
この関数に「Hello」を渡すと、sizeof
8 が返されます。
どうしてこれなの?
重複の可能性:
C -> sizeof string は常に 8
私がそうするならsizeof("HELLO");
、私は期待されている6を取得しますが、私が持っている場合:
void printLength(char *s) {
sizeof(s);
}
この関数に「Hello」を渡すと、sizeof
8 が返されます。
どうしてこれなの?
あなたが得ているのはのサイズですchar *
。実際の長さを取得するには、を使用しますstrlen
。
変わらない。配列はポインタではありません。 sizeof("HELLO")
はchar
配列{'H','E','L','L','O','\0'}
のサイズsizeof(s)
を示し、はポインタのサイズを示します。
固定サイズであると宣言された文字列リテラルと配列は特別に扱われるためです。コンパイラは、それらの大きさを正確に認識しています。
あなたの関数では、コンパイラが知っているのは、それが何かへのポインタであることだけです。あなたは文字ポインタのサイズを取っています(その時点で、コンパイラはそれについて知っているすべてです)。64ビットシステムを使用しているため、関数に何をフィードしても、8バイトのポインターを取得します。
これを行うためのライブラリ関数があります。
#include <string.h>
int getLength(char * str)
{
return strlen(str);
}