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()は「確保されたメモリ領域全体のサイズ」を返します。用途に応じて正しく使い分けることが重要です。
-
JavaのStringBufferとStringBuilderの違いとは?徹底比較
Javaには、文字列を効率的に操作するための可変(ミュータブル)クラスとしてStringBufferとStringBuilderの2つが用意されています。どちらも文字列の反転や連結といった操作が可能で、Stringのように新しいオブジェクトを生成することなく、既存の文字列を直接変更できるのが特徴です。両者の大きな違いはスレッドセーフ性にあります。StringBufferはスレッドセーフである一方、StringBuilderはスレッドセーフではありません。その分、StringBuilderの方が高速に動作します。また、文字列連結演算子「+」は、内部でStringBufferまたはStringBu
-
OneNoteとOneNote for Windows 10の違いを徹底解説
Windows 10には、無料で利用できる「OneNote for Windows 10」というOneNoteアプリが標準搭載されています。このアプリを使えば、OneDrive(個人用・ビジネス用の両アカウント対応)との複数デバイス間同期、手書きノートの検索、コンテンツのメール送信など、さまざまな操作が可能です。 一方で、「OneNote デスクトップアプリ」(OneNote 2016)と呼ばれる別バージョンのOneNoteも存在します。同じ名前を持つアプリがなぜ2つあるのか、そして両者にはどのような違いがあるのか、詳しく見ていきましょう。 OneNoteとOneNote for Window