C言語 strlen関数の使い方【文字列の長さを知る仕組み】

C言語
この記事は約4分で読めます。

こんにちは、ナナです。

プログラムを作る上で文字情報を扱いたい、というシーンはよく登場します。

文字を扱うプログラムにおいて、「文字がいったいどこまで続くのか?」という情報は多くの場合で必要となります。

本記事では次の悩みを解消する内容となっています。

本記事の悩み解決リスト
  • strlen関数の使い方
  • strlen関数のサンプルコード
  • strlen関数で文字列の長さを調べる仕組みとは?
  • strlen関数とsizeof演算子の違いとは?

では、「文字列」から文字列の長さを取得する方法を学んでいきましょう。

スポンサー

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演算子は長さ(サイズ)は変化することがありません。