「10.5.6 C標準ライブラリ関数のエラーメッセージ」を参照してください。 |
本標準インクルードファイル内で定義されている関数を使用する時は、以下の2つの事項に注意する必要があります。
(1) 文字列の複写を行う時、複写先の領域が複写元の領域よりも小さい場合、動作は保証しませんので注意が必要です。
この場合、配列aのサイズは(ヌル文字を含めて)4バイトです。したがって、strcpy関数によって複写を行うと、配列bの領域以外のデータを書き換えることになります。
(2) 文字列の複写を行う時、複写元の領域と複写先の領域が重なっていると正しい動作は保証しませんので注意が必要です。
この場合、複写元の文字列がヌル文字に達する以前に、ヌル文字の上に文字'a'を書き込むことになります。したがって、複写元の文字列のデータに続くデータを書き換えることになります。
複写元の記憶域の内容を、指定した大きさ分、複写先の記憶域に複写します。
void *memcpy(void *s1, const void *s2, size_t n);
複写元の文字列の内容を、複写先の記憶域にヌル文字も含めて複写します。
char *strcpy(char *s1, const char *s2);
複写元の文字列を指定された文字数分、複写先の記憶域に複写します。
char *strncpy(char *s1, const char *s2, size_t n);
s2で指された文字列の先頭から最高n文字をs1で指される記憶域に複写します。s2で指定された文字列の文字数がn文字より短い時は、n文字になるまでヌル文字が付加されます。
s2で指された文字列の文字数がn文字より長い時は、s1に複写された文字列はヌル文字で終了しないことになります。
char *strcat(char *s1, const char *s2);
s1で指された文字列の最後に、s2で指された文字列を連結します。この時、s2の指す文字列の最後を示すヌル文字も複写します。また、s1で指された文字列の最後のヌル文字は削除されます。
char *strncat(char *s1, const char *s2, size_t n);
s2で指された文字列の先頭から最高n文字をs1で指された文字列の最後に付加します。s1で指された文字列の最後のヌル文字はs2の先頭文字で置き換えられます。
また、連結された後の文字列の最後には、必ずヌル文字が付加されます。
long memcmp(const void *s1, const void *s2, size_t n);
s1で指された記憶域とs2で指された記憶域の、最初のn文字分の内容を比較します。
long strcmp(const char *s1, const char *s2);
s1で指された文字列と、s2で指された文字列の内容を比較し、その結果をリターン値として設定します。
long strncmp(const char *s1, const char *s2, size_t n);
s1で指された文字列と、s2で指された文字列を最初のn文字以内の範囲で、その内容を比較します。
指定された記憶域において、指定された文字が最初に現われる位置を検索します。
void *memchr(const void *s, long c, size_t n);
sで指定された記憶域の先頭からn文字の中で最初に現われたcの文字と同一文字の位置へのポインタをリターン値として返します。
指定された文字列において、指定された文字が最初に現われる位置を検索します。
char *strchr(const char *s, long c);
sで指定された文字列中で最初に現われたcの文字と同一文字へのポインタをリターン値として返します。
sによって指される文字列の終了を現わすヌル文字も検索の対象として含まれます。
指定された文字列を先頭から調べ、別に指定した文字列中の文字以外の文字が先頭から何文字続くか求めます。
size_t strcspn(const char *s1, const char *s2);
s2が指す文字列を構成する文字以外の文字が構成される文字列s1の先頭からの長さ
s2が指す文字列を構成する文字以外の文字が、文字列として何文字続くかをs1で指された文字列の先頭から調べ、その文字列の文字数をリターン値として返します。
s2によって指される文字列の終了を表すヌル文字は、s2で指された文字列の一部とはみなされません。
指定された文字列内において、別に指定された文字列中の文字が最初に現われる位置を検索します。
char *strpbrk(const char *s1, const char *s2);
s1で指された文字列において、s2で指された文字列中の文字の一つが最初に現われる所を検索し、そのポインタをリターン値として返します。
指定された文字列において、指定された文字が最後に現われる位置を検索します。
char *strrchr(const char *s, long c);
sで指された文字列の中でcで指定する文字と同一の文字が最後に現われた位置へのポインタをリターン値として返します。
sによって指される文字列の終了を表すヌル文字も検索の対象として含まれます。
指定された文字列を先頭から調べ、別に指定した文字列中の文字が先頭から何文字続くかを求めます。
size_t strspn(const char *s1, const char *s2);
s2が指す文字列を構成する文字が文字列として何文字続くかをs1で指された文字列の先頭から調べ、その文字列の文字数をリターン値として返します。
指定された文字列において、別に指定した文字列が最初に現われる位置を検索します。
char *strstr(const char *s1, const char *s2);
s1で指された文字列において、s2で指された文字列が最初に現われる所を検索し、そのポインタをリターン値として返します。
char *strtok(char *s1, const char *s2);
s2 文字列を切り分けるための文字からなる文字列へのポインタ
strtok関数は文字列を切り分けるために連続的に呼び出されます。
s1で指された文字列を先頭からs2で指された文字列中の文字によって字句に切り分けます。その結果字句に切り分けられれば、その字句の先頭へのポインタを、分けられなければNULLをリターン値として返します。
以前に切り分けられた字句の次の文字から、s2で指された文字列中の文字によって字句に切り分けます。その結果字句に切り分けられれば、その字句の先頭へのポインタを、分けられなければNULLをリターン値として返します。
2回目以降の呼び出しの時は、第1引数にはNULLを指定します。また、s2で指された文字列は呼び出しのたびに異なっていてもかまいません。切り出された字句の最後にはヌル文字が付きます。
2 static char s1[]="a@b,@c/@d";
この例は、文字列「"a@b,@c/@d"」をstrtok関数を用いてa,b,c,dという字句に切り分けるプログラムを示しています。
2行目で文字列s1に初期値として、文字列"a@b,@c/@d"を設定しています。
5行目では、「@」を区切り文字として字句を切り分けるため、strtok関数を呼び出します。この結果、文字'a'へのポインタがリターン値として得られ、文字'a'の次の最初の区切り文字である「@」にヌル文字を埋め込みます。この結果、文字列"a"が切り出されます。
以下、同一の文字列から次々に字句を切り出すために第1引数にNULLを指定してstrtok関数を呼び出します。
この結果、文字列"b"、"c"、"d"が次々に切り出されます。
指定された記憶域の先頭から、指定された文字を指定された文字数分設定します。
void *memset(void *s, long c, size_t n);
エラー番号を指定して、それに対するエラーメッセージを返します。
エラー番号sに対応するエラーメッセージへのポインタをリターン値として返します。
リターン値として返されたエラーメッセージを修正した時、動作は保証しません。
sが指す文字列の終了を表すヌル文字は、文字列の文字数としては計算に入れません。
複写元の記憶域の内容を指定した大きさ分、複写先の記憶域に複写します。また、複写元と複写先の記憶域が、重なっている部分があっても、複写元の重なっている部分を上書きする前に複写するので正しく複写されます。