ポインタベースおよび配列ベースの文字列初期化における文字列の長さとサイズの計算における異なる出力
結果の理解
同じ値を持つポインターベースの文字列 str1 と配列ベースの文字列 str2 を作成する場合、関数 strlen と sizeof は異なる結果を生成します。具体的には、次の宣言の場合:
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev";</code>
strlen は、末尾のヌル終端文字 ( ) を除いた文字シーケンスの長さを測定するため、str1 と str2 の両方に 7 を返します。
ただし、sizeof は異なる値を生成します。
根本的な違い: データ型とメモリ割り当て
sizeof はデータ型のサイズを測定し、strlen は文字シーケンスの長さを測定します。 str1 の場合、char へのポインタなので、sizeof はポインタのサイズを返します。 str2 の場合、これは文字の配列であるため、sizeof はヌル終端文字を含む配列全体のサイズを返します。
詳しく見る
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2;</code>
ここで、str1 と str2 は両方とも同じ配列を指します。 strlen 値は 7 ですが、sizeof 値は異なります。
これは、サイズ評価が基礎となるデータ構造にどのように依存するかを示しています。
以上がC で「strlen」と「sizeof」がポインタベースの文字列と配列ベースの文字列で異なる結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。