ホームページ >バックエンド開発 >C#.Net チュートリアル >C言語のsizeofとstrlenの違いは何ですか
C 言語における sizeof と strlen の違いは次のとおりです: strlen は指定された文字列 str の長さを計算するために使用される関数ですが、終了文字 (つまり NULL 文字) は含まれません; sizeof は単項です関数ではなく演算子です。
差異分析:
strlen は、指定された文字列 str の長さを計算するために使用される関数ですが、末尾は含まれません。文字 (つまり、ヌル文字)。プロトタイプは次のコードのようになります:
size_t strlen(char const* str);
strlen は関数であるため、関数呼び出しが必要です。呼び出し例は次のコードのようになります。
明らかに、上記のコード例の実行結果は 6 です (終了文字 null が含まれていないため)。ここで特別な注意が必要なのは、関数 strlen が size_t 型の値を返すため、次のサンプル コードに示すように、プログラムが予期しない結果を引き起こす可能性があることです。上記の 2 つの判定式は完全に等しいと思われますが、実際はそうではありません。このうち、式 1 の判定には何も問題はなく、プログラムは期待どおりに動作しますが、式 2 の判定結果は異なり、常に真になります。これはなぜでしょうか。
理由は簡単で、関数 strlen の戻り結果は size_t 型 (つまり符号なし整数型) であり、size_t 型が負の値になることはあり得ないからです。したがって、ステートメント「if(strlen(x)-strlen(y)>=0)」は常に true になります。
char sArr[] = "ILOVEC"; /*用strlen()求长度*/ printf("sArr的长度=%d\n", strlen(sArr));明らかに、式 2 の結果は次のようになります。上記と同じ理由で依然として当てはまります。 キーワード sizeof は関数ではなく単項演算子です。関数 strlen とは異なり、次のサンプル コードに示すように、そのパラメーターは配列、ポインター、型、オブジェクト、関数などにすることができます。
/*判断一*/ if(strlen(x)>= strlen(y)) { } /*判断二*/ if(strlen(x)- strlen(y)>= 0) { }
関数 strlen と比較して、次のとおりです。サンプルコードの実行結果は 7 です (終端の null 文字が含まれているため)。同時に、sizeof の場合、バッファーは既知の文字列で初期化されているため、その長さは固定されており、sizeof はコンパイル時にバッファーの長さを計算します。これはまさにコンパイル時に計算されるため、動的に割り当てられたメモリ領域のサイズを返すために sizeof を使用することはできません。
関連する推奨事項:
以上がC言語のsizeofとstrlenの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。