Strlenのソースを表示
←
Strlen
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{小文字}} '''strlen'''は[[C言語]]の[[標準Cライブラリ]]関数の1つであり、[[文字列]]の長さのバイト数を返す。[[ヘッダーファイル]] <code>string.h</code> にて宣言されている。 == 書式 == <syntaxhighlight lang="c"> #include <string.h> size_t strlen(const char *str); </syntaxhighlight> == 説明 == <code>strlen(str)</code>は、文字列<code>str</code>から最後の[[ヌル文字|NULLコード]]を除いたバイト数を返す。例えば<code>strlen("abc")</code>は<code>3</code>を返す。 == 実装例 == <syntaxhighlight lang="c"> size_t StrLen(const char *str) { size_t i = 0; /* iはカウント用の変数 */ while (*str++) i++; /* 1文字ずつ読み出してNULLコードでないことを確認しながらカウントする。 */ return i; } </syntaxhighlight> == 計算量 == Cの文字列は[[ヌル終端文字列]]で実現されており、文字列自身は長さ情報を持たない。そのため<code>strlen</code>の[[計算量]]は文字列の長さに線形比例する線形時間であり、[[ランダウの記号]]を使って表記すると<math>O\left(n\right)</math>となる。これはメモリ([[主記憶装置]])の容量が非常に限られていて、文字列長を保存する領域を余分に確保することが嫌われた時代の名残であるが、文字列長が必要となるたびに毎回<math>O\left(n\right)</math>の計算を実行しなければならないというデメリットもある。 [[C++]]では文字列クラス<code>std::basic_string</code>が規定されたが、C++03までは長さ情報をクラスのメンバー変数によって別途保持するかどうかは規定されておらず、文字列の長さを求めるメンバー関数<code>length()</code>や<code>size()</code>の計算量は[[未規定動作|未規定]]だった。[[C++11]]以降は計算量が定数時間<math>O\left(1\right)</math>に規定されるようになった<ref>[https://en.cppreference.com/w/cpp/string/basic_string/size std::basic_string<CharT,Traits,Allocator>::size, std::basic_string<CharT,Traits,Allocator>::length - cppreference.com]</ref>。[[Java]]の{{Javadoc:SE|java/lang|String}}や[[.NET]]の<code>System.String</code>のように、後発の言語における文字列は長さ情報をフィールドとして別途保持するデータ構造によって実現され、文字列の長さの取得は<math>O\left(1\right)</math>となっていることがほとんどである。 == 脚注 == {{reflist}} == 外部リンク == * {{man|3|strlen|Linux}} {{CProLang}} {{Computer-stub}} [[Category:標準Cライブラリ]]
このページで使用されているテンプレート:
テンプレート:CProLang
(
ソースを閲覧
)
テンプレート:Computer-stub
(
ソースを閲覧
)
テンプレート:Javadoc:SE
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:小文字
(
ソースを閲覧
)
Strlen
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報