C言語の文字列操作の関数
提供: C言語入門
スポンサーリンク
C言語の文字列操作には、 str で始まる関数を利用します。文字列操作においても、l 系や (lがなければ) n 系の安全性の高い関数を利用すべきです。
読み方
- 文字列操作
- もじれつそうさ
目次
概要
C言語には、文字列を操作するための関数が標準ライブラリで提供されています。 文字列操作は、間違いが起きやすいので、できるだけ、ライブラリ関数を使用しましょう。
ISOで規定されていない関数は、libc で提供されません。 OSによって提供されている関数が異なりますので、ご利用の環境のマニュアルをよくお読みください。
主な文字列操作の関数一覧
関数名 | 役割 |
---|---|
strcmp, strncmp, strcasecmp, strncasecmp | 文字列の比較 |
strcat, strncat, strlcat | 文字列の連結 |
strcpy, strncpy, strlcpy | 文字列のコピー |
strstr, strcasestr, strnstr | 文字列の検索 |
strchr, strrchr | 文字の検索 |
index, rindex | 文字列中の文字の検索 |
strspn | 文字セットに含まれない最初の文字の検索 |
strcspn | 文字セットに含まれない最初の文字の戦闘からの長さ |
strtok | 文字列の分割 |
strlen | 文字列の長さ |
ヘッダファイル
string.h
strl... と strn... と str... の違いは?
文字列操作系の関数の中には、
- strcat
- strncat
- strlcat
nやlの無い関数と、n や l が関数名の間に含まれるものがあります。
安全面では、
strl 系関数 > strn 系関数 > str 系関数
となります。
strcat では、コピー先のバッファサイズの指定がないため、コピー元のサイズが大きい場合、メモリ破壊を起こします。 strncat や strlcat では、コピー先のバッファサイズが指定できるため、メモリのサイズを超えて、コピーすることはありません。 strncat とは違い、 strlcat は、NULL文字で終わるように処理されます。必ずターミネートされるため、バッファオーバーランしないことが保証されます。
strl... と strn... と str... のどれを使用するべきか?
OS によって、ある関数、ない関数があるかもしれませんが、優先順位付けをするとすれば、
strl 系関数 > strn 系関数 > str 系関数
となります。 str... 系の関数は、安全面では、よろしくないため、使用すべきではありません。
関連項目
ツイート
スポンサーリンク