strlenはC言語の標準Cライブラリ関数の1つであり、文字列の長さのバイト数を返す。ヘッダーファイル string.h にて宣言されている。

書式 #include <string.h> size_t strlen(const char *str);

説明 strlen(str)は、文字列strから最後のNULLコードを除いたバイト数を返す。例えばstrlen("abc")は3を返す。

実装例 size_t StrLen(const char *str) { size_t i = 0; /* iはカウント用の変数 */ while (*str++) i++; /* 1文字ずつ読み出してNULLコードでないことを確認しながらカウントする。 */ return i; }

計算量 Cの文字列はヌル終端文字列で実現されており、文字列自身は長さ情報を持たない。そのためstrlenの計算量は文字列の長さに線形比例する線形時間であり、ランダウの記号を使って表記するととなる。これはメモリ(主記憶装置)の容量が非常に限られていて、文字列長を保存する領域を余分に確保することが嫌われた時代の名残であるが、文字列長が必要となるたびに毎回の計算を実行しなければならないというデメリットもある。

C++では文字列クラスstd::basic_stringが規定されたが、C++03までは長さ情報をクラスのメンバー変数によって別途保持するかどうかは規定されておらず、文字列の長さを求めるメンバー関数length()やsize()の計算量は未規定だった。C++11以降は計算量が定数時間に規定されるようになったstd::basic_string<CharT,Traits,Allocator>::size, std::basic_string<CharT,Traits,Allocator>::length - cppreference.com。Javaのや.NETのSystem.Stringのように、後発の言語における文字列は長さ情報をフィールドとして別途保持するデータ構造によって実現され、文字列の長さの取得はとなっていることがほとんどである。

脚注

外部リンク