sizeof() と strlen() は C 言語で非常に頻繁に使われる2つであり、どちらもメモリサイズの計算に関係していますが、その役割は異なります。

sizeof() と strlen() の主な違いは次のとおりです:

  • sizeof()は演算子であり、strlen()は関数です。
  • sizeof()は変数または型が占めるメモリのバイト数を計算し、strlen()は文字列内の文字数を計算します。
  • sizeof()は任意の型のデータに使用でき、strlen()はヌル文字 '\0' で終わる文字列にのみ使用できます。
  • sizeof() は文字列の長さを計算し、末尾の '\0' を含みます。strlen() は文字列の長さを計算し、文字列末尾の '\0' を含みません。

sizeof() は関数ではなく演算子であり、型または変数が占めるメモリのバイト数を計算するために使用されます。これを使用して、基本データ型、配列、構造体、共用体など、あらゆる型のデータのバイト数を取得できます。

sizeof()

sizeof() の使用方法は次のとおりです:

sizeof(type)
sizeof(variable)
パラメータの説明:
  • type は型名です
  • variable は変数名です

例

sizeof(int)  // 4を出力。つまり整数型変数は4バイトを占める
int x;
sizeof(x)  // 4を出力。つまり整数型変数xは4バイトを占める

sizeof() は文字列の長さを計算し、末尾の '\0' を含みます

例

char s[] = "Hello, world!";
sizeof(s)  // 14を出力。つまり文字列sには14文字あります(末尾のヌル文字 '\0' を含む)

strlen()

strlen() 関数は、文字列の長さ、つまりそれに含まれる文字数(文字列末尾のヌル文字 '\0' を含まない)を計算するために使用されます。

注意すべき点は、strlen() 関数はヌル文字 '\0' で終わる文字列の長さの計算にのみ使用できることです。文字列にヌル文字が含まれない場合、strlen() 関数の動作は未定義です。

strlen() の使用方法は次のとおりです:

strlen(string)

ここで string はヌル文字 '\0' で終わる文字列ですが、文字列の長さを計算する際は末尾の '\0' を含みません。例:

例

char s[] = "Hello, world!";
strlen(s)  // 13を出力。つまり文字列sには13文字あります(末尾のヌル文字 '\0' を含まない)

例

以下は sizeof() と strlen() の違いに関する完全な例です:

例

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void msg()
{
    char s[] = "Hello, world!";
    printf("s = %s\n", s);
    printf("sizeof(s) = %d\n", sizeof(s));
    printf("strlen(s) = %d\n", strlen(s));
}

int main(int argc, char* argv[], char* envp[])
{
    msg();
    return 0;
}

出力結果は次のとおりです:

s = Hello, world!
sizeof(s) = 14
strlen(s) = 13