0

文字列の長さを取得しようとしていますが、間違った値を取得しています。長さはわずか 4 文字です。どうしてこれなの?私はsizeof()正しく使用していますか?

#include <stdio.h>

int main(void)
{
    char *s;
    int len;

    s = "hello world";
    len = sizeof(s);
    printf("%d\n", len);
}
4

3 に答える 3

6

sizeof演算子はポインタのサイズを返しています。文字列の長さが必要な場合は、strlen関数を使用します。

配列 (例: char s[] = "hello world") を持っていたとしても、sizeof演算子は文字列終端文字を含む配列の長さを返すため、間違った値を返します。

ああ、補足として、文字列ポインタがリテラル文字列を指すようにする場合は、それを宣言する必要がありますconst char *。文字列リテラルは定数であり、変更できないためです。

于 2013-08-30T05:02:52.827 に答える
1

sポインタとして宣言しました。ポインターに適用すると、ポイントされてsizeof()いる要素のサイズではなく、ポインターのサイズを返します。あなたのシステムでは、ポインターのサイズはcharたまたま 4 バイトです。したがって、出力として 4 が表示されます。

于 2013-08-30T05:03:12.593 に答える