2

charポインターと配列に同じ文字列値を割り当てます

char *str = "hello" "world";  
char str1[] = "hello" "world";

次に、sizeof()関数を使用して長さを返します

sizeof(str);     //  on my computer, it's 8 !!
sizeof(str1);    //  return 11, which is right

ただし、どちらも次の方法ですぐに印刷できます%s

printf("%s\n%s\n", str, str1);

では、なぜsizeof(str);間違った値を返すのでしょうか?

4

5 に答える 5

1

値 8 はポインタのサイズです。str は実際には見た目どおりのポインタです。つまり、別の文字列リテラルを指すように再割り当てできます。

変数 str1 は文字の配列であるため、再割り当てすることはできず、そのサイズは配列のサイズに関連しています。

于 2013-07-05T08:33:50.627 に答える
1

最初のものはポインタです。文字数ではなく、メモリ内のポインタのサイズを数えます。違いを理解する必要があります。char*行に文字が含まれていると想定するメモリ内の位置を指します。char[x]行に x 文字があるメモリ内の位置です。

于 2013-07-05T08:28:39.420 に答える
0

str*ポインタstr[]型で、char[11] 型です。したがって、sizeof()異なる値が返されます。文字列の長さではなく、型のサイズが返されます。

strlen()文字列のサイズを確認するために使用する必要があります。テストで使用するすべての文字列はstrlen()、終端の null (\0) で終了する必要があることに注意してください。

定数 ("lorem ipsum" を使用してコードで定義) の場合、コンパイラによって終端の null が追加されます。

C プログラミング言語自体での文字列の唯一のサポートは、コンパイラが引用符で囲まれた文字列定数を、静的メモリに格納される null で終わる文字列に変換することです。

https://en.wikipedia.org/wiki/C_string_handling

于 2013-07-05T08:34:51.990 に答える