工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語 strlen() vs sizeof():違いと正しい使い分け

strlen()とは

C言語において、strlen()はヌル終端文字列の文字数を、終端の'\0'を除いて返します。英数字、記号、スペースすべてをカウントします。

本記事ではstrlen()、sizeof()の役割と、それらがなぜ異なる振る舞いをするのかを解説します。

sizeof()とは

sizeof演算子は、オペランドのサイズをバイト単位で返します。静的な型に対してはコンパイル時に、可変長配列に対しては実行時に評価されます。プリミティブ型、ポインタ、構造体、共用体など、Cのすべてのデータ型に適用可能です。結果の型はsize_tで、最大オブジェクトのサイズを保持できる符号なし整数型です。

intやdoubleのサイズは32ビット/64ビットシステムで異なるため、sizeofを使うことで移植性が確保されます。

主な違い

strlen()の構文

size_t length = strlen(my_string);

my_stringは文字配列またはヌル終端文字列へのポインタ。

strlen()の例

#include <stdio.h>
#include <string.h>
int main() {
    char strng[] = "January";
    printf("Length of given string is: %zu\n", strlen(strng));
    return 0;
}

出力:

Length of given string is: 7

sizeof()の構文

1) sizeof(型)

sizeof(type)は指定型のサイズを返します。

#include <stdio.h>
#define my_sizeof(type) ((char*)(&type+1) - (char*)&type)
int main() {
    double x;
    printf("%zu", my_sizeof(x));
    return 0;
}

出力:

8

2) sizeof(変数)

変数名を渡してそのメモリフットプリントを取得。

#include <stdio.h>
int main() {
    printf("sizeof(char) = %zu\n", sizeof(char));
    return 0;
}

出力:

sizeof(char) = 1

3) sizeof(式)

式の型サイズを値を計算せずに評価。

#include <stdio.h>
int main() {
    char p = 'S';
    double q = 4.65;
    printf("Size of variable p : %zu\n", sizeof(p));
    printf("Size of an expression : %zu\n", sizeof(p+q));
    int a = (int)(p+q);
    printf("Size of explicitly converted expression : %zu\n", sizeof(a));
    return 0;
}

出力:

Size of variable p : 1
Size of an expression : 8
Size of explicitly converted expression : 4

視覚的比較

C言語 strlen() vs sizeof():違いと正しい使い分け

以下は両者のサイドバイサイド比較です。

機能strlen()sizeof()
ヘッダファイルstring.h不要(組み込み演算子)
目的文字列長を計算(ヌル除く)型や変数のメモリサイズを取得
戻り値型size_tsize_t
評価タイミング実行時(文字列を走査)コンパイル時(VLA除く)
適用対象文字配列またはヌル終端文字列ポインタのみすべてのデータ型と式

使い分けの指針

これらの指針を守ることで、効率的・移植性・保守性に優れたCコードが書けます。

C言語

  1. ブレージング vs 半田付け:温度・強度・冶金学的違いを完全解説
  2. 2ストローク vs 4ストロークエンジン:主な違いを徹底解説
  3. DCモーターとACモーターの違い:主要な差異と購入ガイド
  4. アスベスト vs ガラス繊維:主な違い、用途、安全性の考慮点
  5. C 言語の構造体 vs 共用体: 実践ガイド
  6. C# vs C++: 機能、パフォーマンス、ユースケースの明確な比較
  7. C vs C++: 主な違いとそれぞれを選ぶべきケース
  8. C言語 vs Java:機能、歴史、用途の包括的比較
  9. Python vs JavaScript:主な違い、特徴、選び方の指針
  10. Python vs Ruby:特徴、メリット、ユースケースの徹底比較
  11. Python 2 vs Python 3:主な違いと適切なバージョン選択