文字列の長さを取得しようとしていますが、間違った値を取得しています。長さはわずか 4 文字です。どうしてこれなの?私はsizeof()
正しく使用していますか?
#include <stdio.h>
int main(void)
{
char *s;
int len;
s = "hello world";
len = sizeof(s);
printf("%d\n", len);
}
文字列の長さを取得しようとしていますが、間違った値を取得しています。長さはわずか 4 文字です。どうしてこれなの?私はsizeof()
正しく使用していますか?
#include <stdio.h>
int main(void)
{
char *s;
int len;
s = "hello world";
len = sizeof(s);
printf("%d\n", len);
}
sizeof
演算子はポインタのサイズを返しています。文字列の長さが必要な場合は、strlen
関数を使用します。
配列 (例: char s[] = "hello world"
) を持っていたとしても、sizeof
演算子は文字列終端文字を含む配列の長さを返すため、間違った値を返します。
ああ、補足として、文字列ポインタがリテラル文字列を指すようにする場合は、それを宣言する必要がありますconst char *
。文字列リテラルは定数であり、変更できないためです。
s
ポインタとして宣言しました。ポインターに適用すると、ポイントされてsizeof()
いる要素のサイズではなく、ポインターのサイズを返します。あなたのシステムでは、ポインターのサイズはchar
たまたま 4 バイトです。したがって、出力として 4 が表示されます。