C言語でよく使うであろうヘッダファイル string.h で定義されている関数をまとめてみました。
検出系
- void *memchr(const void *buf, int c, size_t count)
buf
の最初のcount
バイトを検索して、unsigned char
に変換されたc
が最初に現れる場所を探します。buf
内のc
の場所へのポインタを返します。buf
の最初のcount
バイトの中にc
が存在しない場合はNULL
が返されます。- char *strchr(const char *string, int c)
文字列
string
の最初の文字c
を検出します。string
はnul文字で終わっている必要があります。 戻り値は、内部的に文字に変換されたc
がstring
の中で最初に現れる場所へのポインタです。 存在しなければNULL
が戻り値となります。- char *strstr(const char *string1, const char *string2)
string1
の中でstring2
が最初に現れる場所を検出します。 戻り値は、string1
の中で最初に現れたstring2
の先頭へのポインタです。string2
がstring1
の中に存在しなかった場合、 戻り値はNULL
となります。string2
が指す文字列の長さが 0 の場合はstring1
へのポインタが戻り値になります。- size_t strspn(const char *string1, const char *string2)
文字列
string1
の先頭から始まる部分文字列で、string2
に含まれる文字からなるものの最大の長さを返します。 別の言い方をすれば、 文字列string2
に含まれない文字がstring1
の中で最初に現れる場所のインデックスを返します。string1
のすべての文字がstring2
に含まれる場合にはstring1
の長さが返されます。- size_t strcspn(const char *string1, const char *string2)
文字列
string1
の先頭から始まる文字列で、string2
に含まれない文字からなるものの最大の長さを返します。 別の言い方をすれば、文字列string2
に含まれる文字がstring1
にの中で最初に現れる場所のインデックスを返します。string1
のすべての文字がstring2
に含まれない場合にはstring1
の長さが返されます。- char *strpbrk(const char *string1, const char *string2)
string2
が指し示す文字列に含まれる文字のうちで、string1
が指し示す文字列の中に最初に現れる文字を探します。 戻り値は検出された文字へのポインタです。string1
とstring2
に共通の文字がなければNULL
を返します。- char *strtok(const char *string, const char *separator)
separator
をstring
のトークンの区切り文字として扱います。 戻り値は先頭にある区切り文字をスキップして、string
の中の最初のトークンを探し、そのトークンへのポインタを返します。 1度呼び出した後は、string
にNULL
を指定してstrtok
を呼び出すことで、 最初に指定されたstring
内の次のトークンへのポインタを返します。 返されるトークンは、区切り文字が nul文字に置き換えられたものになります。 また、区切り文字separator
は呼び出しごとに変更できます。 トークンがなくなると、NULL
が返されます。
比較系
- int memcmp(const void *buf1, const void *buf2, size_t count)
buf1
とbuf2
の最初のcount
バイトを比較して、次の値を返します。値 条件 正 buf1
はbuf2
より小さい0 buf1
はbuf2
と等しい負 buf1
はbuf2
より大きい- int strncmp(const char *string1, const char *string2, size_t count)
string1
とstring2
の最初のcount
文字分を比較して、次の値を返します。値 条件 正 substring1
はsubstring2
より小さい0 substring1
はsubstring2
と等しい負 substring1
はsubstring2
より大きい- int strcmp(const char *string1, const char *string2)
string1
とstring2
を比較して、次の値を返します。値 条件 正 string1
はstring2
より小さい0 string1
はstring2
と等しい負 string1
はstring2
より大きい
コピー系
- void *memcpy(void *dest, const void *src, size_t count)
src
のcount
バイトをdest にコピーします。 アドレスが重複するオブジェクト間でのコピーが行われた場合の動作は不定です。 戻り値はdest
へのポインタです。- char *strcpy(char *string1, const char *string2)
string2
を最後のnul文字も含めて、ポインタstring1
で指定される位置にコピーします。string1
に文字列定数を指定することはできません。 戻り値はstring1
へのポインタです。- char *strncpy(char *string1, const char *string2, size_t count)
string2
のcount
文字分をstring1
にコピーします。count
がstring1
の長さより小さいか等しい場合、コピーされた文字列にnul文字は付加されません。count
がstring2
の長さより大きい場合、結果のstring1
には長さがcount
になるまで nul文字が埋め込まれます。 戻り値はstring1
へのポインタです。- void *memmove(void *dest, const void *src, size_t count)
memcpy
と同様に、src
のcount
バイトをdest にコピーしますが、memcpy
とは違ってアドレスが重複するオブジェクト間でのコピーを安全に行うことができます。 これはsrc
を内部の1次配列にコピーしたうえでバイトを行うからです。 戻り値はdest
へのポインタです。
- void *memset(void *dest, int c, size_t count)
dest
の最初のcount
バイトを値c
に変換します。 戻り値はdest
へのポインタです。
文字列結合
- char *strcat(char *string1, const char string2)
string2
をstring1
に連結し、結果の文字列の最後に'\0'
を付けます。string1
に文字列定数を指定することはできませんが、string2
には文字列定数を指定することができます。 戻り値はstring1
へのポインタです。- char *strncat(char *string1, const char string2, size_t count)
string2
の最初のcount
文字をstring1
に連結し、結果の文字列の最後に'\0'
を付けます。string2
がcount
文字に満たない場合はstring2
全体をstring1
に連結します。string1
に文字列定数を指定することはできませんが、string2
には文字列定数を指定することができます。 戻り値はstring1
へのポインタです。
その他
- char *strerror(int errno)
errno
にあるエラー番号をエラーメッセージ文字列にマップして、文字列へのポインタを返します。