「memmove」タグアーカイブ

string.h にある、よく使う関数


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文字で終わっている必要があります。 戻り値は、内部的に文字に変換された cstring の中で最初に現れる場所へのポインタです。 存在しなければ NULL が戻り値となります。

char *strstr(const char *string1, const char *string2)

string1 の中で string2 が最初に現れる場所を検出します。 戻り値は、 string1 の中で最初に現れた string2 の先頭へのポインタです。 string2string1 の中に存在しなかった場合、 戻り値は 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 が指し示す文字列の中に最初に現れる文字を探します。 戻り値は検出された文字へのポインタです。 string1string2 に共通の文字がなければ NULL を返します。

char *strtok(const char *string, const char *separator)

separatorstring のトークンの区切り文字として扱います。 戻り値は先頭にある区切り文字をスキップして、 string の中の最初のトークンを探し、そのトークンへのポインタを返します。 1度呼び出した後は、 stringNULL を指定して strtok を呼び出すことで、 最初に指定された string 内の次のトークンへのポインタを返します。 返されるトークンは、区切り文字が nul文字に置き換えられたものになります。 また、区切り文字 separator は呼び出しごとに変更できます。 トークンがなくなると、 NULL が返されます。

比較系

int memcmp(const void *buf1, const void *buf2, size_t count)

buf1buf2 の最初の count バイトを比較して、次の値を返します。

条件
buf1buf2 より小さい
0 buf1buf2 と等しい
buf1buf2 より大きい
int strncmp(const char *string1, const char *string2, size_t count)

string1string2 の最初の count 文字分を比較して、次の値を返します。

条件
substring1substring2 より小さい
0 substring1substring2 と等しい
substring1substring2 より大きい
int strcmp(const char *string1, const char *string2)

string1string2 を比較して、次の値を返します。

条件
string1string2 より小さい
0 string1string2 と等しい
string1string2 より大きい

コピー系

void *memcpy(void *dest, const void *src, size_t count)

srccount バイトを dest にコピーします。 アドレスが重複するオブジェクト間でのコピーが行われた場合の動作は不定です。 戻り値は dest へのポインタです。

char *strcpy(char *string1, const char *string2)

string2 を最後のnul文字も含めて、ポインタ string1 で指定される位置にコピーします。 string1 に文字列定数を指定することはできません。 戻り値は string1 へのポインタです。

char *strncpy(char *string1, const char *string2, size_t count)

string2count 文字分を string1 にコピーします。 countstring1 の長さより小さいか等しい場合、コピーされた文字列にnul文字は付加されません。 countstring2 の長さより大きい場合、結果の string1 には長さが count になるまで nul文字が埋め込まれます。 戻り値は string1 へのポインタです。

void *memmove(void *dest, const void *src, size_t count)

memcpy と同様に、 srccount バイトを 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)

string2string1 に連結し、結果の文字列の最後に '\0' を付けます。 string1 に文字列定数を指定することはできませんが、 string2 には文字列定数を指定することができます。 戻り値は string1 へのポインタです。

char *strncat(char *string1, const char string2, size_t count)

string2 の最初の count 文字を string1 に連結し、結果の文字列の最後に '\0' を付けます。 string2count 文字に満たない場合は string2 全体を string1 に連結します。 string1 に文字列定数を指定することはできませんが、 string2 には文字列定数を指定することができます。 戻り値は string1 へのポインタです。

その他

char *strerror(int errno)

errno にあるエラー番号をエラーメッセージ文字列にマップして、文字列へのポインタを返します。