C プログラミングでは、ポインタと配列を使用して文字列を初期化すると、文字列の初期化に予期しない不一致が生じる可能性があります。 strlen と sizeof の出力。特定の例を調べて、この現象を分析してみましょう。
提供されたコード スニペット:
<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
変動は、ポインタと配列のデータ型とオブジェクト サイズの基本的な違い。
Pointer (str1)
Array (str2)
これらの概念をさらに詳しく説明するために、コードを少し変更してみましょう。
<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>
このコードstrlen: 7 に関しては、str1 と str2 の両方に同じ結果が生成されます。ただし、sizeof(str1) はメモリ アドレスを表す 4 のままですが、sizeof(str2) は 8 に調整され、NULL 終了文字が考慮されます。
したがって、重要なポイントは、C プログラミングで文字列を操作するときに、ポインターと配列の個別のデータ型とサイズ設定の特性を理解することです。
以上がC でのポインタと配列文字列の初期化で `strlen` と `sizeof` が異なる結果を与えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。