C言語のsizeofとstrlenの違いは何ですか

王林
リリース: 2020-11-20 10:04:18
オリジナル
8141 人が閲覧しました

C 言語における sizeof と strlen の違いは次のとおりです: strlen は指定された文字列 str の長さを計算するために使用される関数ですが、終了文字 (つまり NULL 文字) は含まれません; sizeof は単項です関数ではなく演算子です。

C言語のsizeofとstrlenの違いは何ですか

差異分析:

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#.Net 開発グラフィック チュートリアル


以上がC言語のsizeofとstrlenの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート