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... 系の関数は、安全面では、よろしくないため、使用すべきではありません。

関連項目




スポンサーリンク