こんにちは、ナナです。
プログラムを作る上で文字情報を扱いたい、というシーンはよく登場します。
文字を扱うプログラムにおいて、「文字がいったいどこまで続くのか?」という情報は多くの場合で必要となります。
本記事では次の悩みを解消する内容となっています。
では、「文字列」から文字列の長さを取得する方法を学んでいきましょう。
strlen関数:文字列の長さを調べる標準ライブラリ関数
文字列の長さを知りたい!というニーズは非常によくあるため、標準ライブラリ関数として提供されています。
strlen関数の宣言
C言語で「文字列の長さ」を調べる標準ライブラリ関数は、次の関数になります。
#include <string.h>
size_t strlen(const char * str);
strlen関数はstring.hをインクルードすることで使用できます。
strlenとは「string:文字列」の「length:長さ」を取得することを意味します。
戻り値の型となっている「size_t型」は、VisualStudio環境では「unsigned int型」として定義されています。
サイズを管理する変数を扱うときによく登場しますよ!
strlen関数の仕様について
strlen関数は、文字列を指定する引数を受け取って、文字列の長さを戻り値で返却します。
includeファイル | string.h |
関数仕様 | size_t strlen(const char * str); |
引数1 | 長さを調べたい文字列へのポインタ |
戻り値 | 長さ |
特記事項 | 長さにヌル文字は含めない |
文字列の終端データである「ヌル文字」は長さに含まれません。注意しましょう!
strlen関数を使ったサンプルコード
それでは、strlen関数の呼び出し方を紹介しましょう。
#include <stdio.h>
#include <string.h>
int main(void)
{
size_t len;
char hello[] = "Hello";
len = strlen("abc"); // 文字列リテラルを与える
printf("abc:%d \n", len);
len = strlen(hello); // char配列を与える
printf("Hello:%d \n", len);
return 0;
}
abc:3
Hello:5
strlen関数の引数はchar型のポインタ変数となっています。文字列リテラルを与えることもできますし、char型配列を与えることでも動作します。
引数にconst修飾子が付いているのは、strlen関数では「渡された文字列内容を書き換えません!」ということを明示しています。
つまり、「安心して渡してください」ということを表明しているのです。
strlen関数で文字列の長さを調べる仕組み
strlen関数では、いったいどのような方法で文字列の長さを調べているのでしょうか?
strlen関数の仕組み
C言語において「文字列」はヌル文字で終了しなければならない、というルールがあります。strlen関数はこのルールを元に長さを調べています。
size_t strlen(const char * str)
{
size_t len = 0;
// ヌル文字までカウンティング
while (str[len] != '\0')
{
len++;
}
return len;
}
「ヌル文字」とはC言語で「’\0’」で示される情報のことです。
文字列に関する知識は『文字と文字列の違いを図解【ヌル文字の役割と使い方】』を読んで学びましょう。
strlen関数の長さとsizeof演算子の違い
長さ(サイズ)を調べることができるものとして「sizeof演算子」というものがあります。strlen関数で取得できる長さとは異なるため注意しておきましょう!
strlen関数とsizeof演算子を使った結果の違い
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[5] = "abc";
// 文字列の長さ
printf("strlen:%d \n", strlen(buf));
// メモリサイズ
printf("sizeof:%d \n", sizeof(buf));
return 0;
}
strlen:3
sizeof:5
このように得られる結果が異なることに注意が必要です。
strlen関数は文字列の情報が変化すると長さが変わることがありますが、sizeof演算子は長さ(サイズ)は変化することがありません。