ポインタと配列の初期化による Strlen と Sizedof からの異なる出力
C プログラミングでは、sizeof 関数と strlen 関数はサイズと配列に関する情報を提供します。それぞれデータ型の長さ。ただし、ポインタと配列を扱う場合、これらの関数の出力が異なる可能性があり、混乱が生じる可能性があります。
次の例を考えてみましょう。
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev"; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
このコードの出力は次のとおりです。
7 4 7 8
説明:
違いをさらに明確にするために、コードに対する次の変更を検討してください。
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
この場合、出力は次のようになります:
7 4 7 8
str1 と str2 の両方が同じ文字列を参照しているとしても、sizeof(str1) はポインターのサイズを返します。これは、str1 が配列の最初の要素を指すポインターであるのに対し、str2 は文字の配列であるためです。
以上がC で `strlen` と `sizeof` がポインターと配列に対して異なる出力を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。