Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語におけるstrlen()とsizeof()の違いを徹底解説

C言語では、文字列の長さを取得するstrlen()と、データ型のサイズを取得するsizeof()は、どちらもよく使われますが、その役割と動作はまったく異なります。本記事では、それぞれの特徴と具体的な違いをわかりやすく解説します。


strlen()とは

strlen()はC言語の標準ライブラリ関数の一つで、「string.h」ヘッダーファイルに宣言されています。文字列や文字配列の長さ(終端のヌル文字 '\0' を除いた文字数)を取得するために使用されます。

C言語におけるstrlen()の構文は以下の通りです。

size_t strlen(const char *string);

パラメータの説明:

string − 長さを計算する対象となる文字列です。

strlen()の使用例

#include <stdio.h>
#include <string.h>
int main () {
    char s1[10] = "Hello";
    int len ;
    len = strlen(s1);
    printf("Length of string s1 : %d\n", len );
    return 0;
}

出力

Length of string s1 : 5

上記の例では、char型の配列s1を文字列「Hello」で初期化し、strlen()で求めた長さを変数lenに格納しています。配列のサイズ自体は10ですが、実際に格納されている文字列は5文字なので、strlen()は5を返します。

char s1[10] = "Hello";
int len ;
len = strlen(s1);

sizeof()とは

sizeof()はC言語の単項演算子であり、任意のデータ型や変数のサイズをバイト単位で取得するために使用されます。コンパイル時に評価されるため、実行時のオーバーヘッドがないのも大きな特徴です。

C言語におけるsizeof()の構文は以下の通りです。

sizeof( type );

パラメータの説明:

type − サイズを計算したいデータ型または変数です。

sizeof()の使用例

#include <stdio.h>
int main() {
    int a = 16;
    printf("Size of variable a : %d\n",sizeof(a));
    printf("Size of int data type : %d\n",sizeof(int));
    printf("Size of char data type : %d\n",sizeof(char));
    printf("Size of float data type : %d\n",sizeof(float));
    printf("Size of double data type : %d\n",sizeof(double));
    return 0;
}

出力

Size of variable a : 4
Size of int data type : 4
Size of char data type : 1
Size of float data type : 4
Size of double data type : 8

※出力結果は実行環境(処理系)によって異なる場合があります。

strlen()とsizeof()の主な違い

比較項目strlen()sizeof()
種類ライブラリ関数演算子
必要なヘッダーstring.h が必要不要
戻り値文字列の長さ(ヌル文字を含まない)型や変数のメモリサイズ(バイト)
評価タイミング実行時コンパイル時

具体例で確認

char s1[10] = "Hello";
strlen(s1);  // 5 を返す(実際の文字数)
sizeof(s1);  // 10 を返す(配列全体のバイト数)

このように、同じ配列に対してもstrlen()は「実際の文字列の長さ」を、sizeof()は「確保されたメモリ領域全体のサイズ」を返します。用途に応じて正しく使い分けることが重要です。

  1. JavaのStringBufferとStringBuilderの違いとは?徹底比較

    Javaには、文字列を効率的に操作するための可変(ミュータブル)クラスとしてStringBufferとStringBuilderの2つが用意されています。どちらも文字列の反転や連結といった操作が可能で、Stringのように新しいオブジェクトを生成することなく、既存の文字列を直接変更できるのが特徴です。両者の大きな違いはスレッドセーフ性にあります。StringBufferはスレッドセーフである一方、StringBuilderはスレッドセーフではありません。その分、StringBuilderの方が高速に動作します。また、文字列連結演算子「+」は、内部でStringBufferまたはStringBu

  2. OneNoteとOneNote for Windows 10の違いを徹底解説

    Windows 10には、無料で利用できる「OneNote for Windows 10」というOneNoteアプリが標準搭載されています。このアプリを使えば、OneDrive(個人用・ビジネス用の両アカウント対応)との複数デバイス間同期、手書きノートの検索、コンテンツのメール送信など、さまざまな操作が可能です。 一方で、「OneNote デスクトップアプリ」(OneNote 2016)と呼ばれる別バージョンのOneNoteも存在します。同じ名前を持つアプリがなぜ2つあるのか、そして両者にはどのような違いがあるのか、詳しく見ていきましょう。 OneNoteとOneNote for Window