ポインタベースおよび配列ベースの文字列初期化における文字列の長さとサイズの計算における異なる出力
結果の理解
ポインタベースの文字列 str1 と配列ベースの文字列 str2 を作成する場合、同じ値でも、関数 strlen と sizeof は異なる結果を生成します。具体的には、宣言の場合:
char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
strlen は、末尾の NULL ターミネータ (\0) を除いた文字シーケンスの長さを測定するため、str1 と str2 の両方に 7 を返します。
ただし、sizeof は異なる値を生成します。
根本的な違い: データ型とメモリAllocation
sizeof はデータ型のサイズを測定し、strlen は文字シーケンスの長さを測定します。 str1 の場合、char へのポインタなので、sizeof はポインタのサイズを返します。 str2 の場合、これは文字の配列であるため、sizeof はヌル終端文字を含む配列全体のサイズを返します。
詳細
char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;
これで、str1 と str2 は両方とも同じ配列を指します。 strlen 値は 7 ですが、sizeof 値は異なります。
これは、サイズ評価が基礎となるデータ構造にどのように依存するかを示しています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3