size_t
sizeof 演算子の結果である符号なし整数型です。
NULL
実装で定義されたヌルポインター定数に展開されます。
C言語におけるロケール（''locale''）とは、ユーザーの言語、地域、およびユーザーがユーザーインターフェイスで表示したい特別なバリアント設定を定義する一連のパラメーターです。
ロケールを設定するにはlocale.hで宣言される関数setlocaleを用いる。
C11§7.24.2 ''Copying functions''『JISX3010:2003』p.233「7.21.2 コピー関数」
形式
void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
引数
返却値
機能
s2が指すオブジェクトから、s1が指すオブジェクトに、n文字コピーする。
s1とs2が重なっている場合、その動作は未定義である。
返却値はs1の値を返す。
例
int main(void) {
  char s1[3] = {'a', 'b', 'c'};
  char s2[3] = {'d', 'e', 'f'};
  printf("\nコピー前のs1の値；");
  for (int i = 0; i < 3; i＋＋)
    printf("%2x ", s1[i]);
  printf("\nコピー前のs2の値：");
  for (int i = 0; i < 3; i＋＋)
    printf("%2x ", s2[i]);
  memcpy(s1, s2, 2);
  printf("\nコピー後のs1の値；");
  for (int i = 0; i < 3; i＋＋)
    printf("%2x ", s1[i]);
  printf("\nコピー後のs2の値：");
  for (int i = 0; i < 3; i＋＋)
    printf("%2x ", s2[i]);
}
形式
void *memmove(void *s1, const void *s2, size_t n);
引数
返却値
機能
s2が指すオブジェクトから、s1が指すオブジェクトに、n文字コピーする。
s1とs2が重なっていてもよい。
返却値はs1の値を返す。
例
int main(void) {
  char s[6] = {'a', 'b', 'c', 'd', 'e', 'f'};
  printf("\nコピー前のsの値；");
  for (int i = 0; i < 6; i++)
    printf("%2x ", s[i]);
  memmove(&s[3], &s[2], 2);
  printf("\nコピー後のsの値；");
  for (int i = 0; i < 6; i++)
    printf("%2x ", s[i]);
}
形式
char *strcpy(char * restrict s1, const char * restrict s2);
引数
返却値
機能
s2が指す文字列（終端ナル文字を含む）をs1が指す配列にコピーする。
s1とs2が重なっている場合、その動作は未定義である。
返却値はs1の値を返す。
例
int main(void) {
  char s1[16] = "abc";
  char s2[16] = "def";
  printf("コピー前のs1の値：%s\n", s1);
  printf("コピー前のs2の値：%s\n", s2);
  strcpy(s1, s2);
  printf("コピー後のs1の値：%s\n", s1);
  printf("コピー後のs2の値：%s\n", s2);
}
形式
char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
引数
返却値
機能
s2が指す配列から、s1が指す配列に、n個以下の文字（ナル文字に続く文字はコピーしない。）をコピーする。
s1とs2が重なっている場合、その動作は未定義である。
s2が指す配列がn文字より短い配列である場合、s1が指す配列中のコピーの後ろに、全体でn文字書き込むまでナル文字を付加する。
返却値はs1の値を返す。
例
int main(void) {
  char s1[16] = "abc";
  char s2[16] = "def";
  printf("コピー前のs1の値：%s\n", s1);
  printf("コピー前のs2の値：%s\n", s2);
  strcpy(s1, s2);
  printf("コピー後のs1の値：%s\n", s1);
  printf("コピー後のs2の値：%s\n", s2);
}
『JISX3010:2003』p.235「7.21.3 連結関数」
形式
char *strcat(char * restrict s1, const char * restrict s2);
引数
返却値
機能
s2が指す文字列（終端ナル文字を含む。）のコピーをs1が指す文字列の最後に付加する。
s2の先頭の文字が、s1が指す文字列の最後のナル文字を書き換える。
s1とs2が重なっている場合、その動作は未定義である。
返却値はs1の値を返す。
例
int main(void) {
  char s1[16] = "abc";
  char s2[16] = "def";
  printf("付加前のs1の値：%s\n", s1);
  printf("付加前のs2の値：%s\n", s2);
  strcat(s1, s2);
  printf("付加後のs1の値：%s\n", s1);
  printf("付加後のs2の値：%s\n", s2);
}
形式
char *strncat(char * restrict s1, const char * restrict s2, size_t n);
引数
返却値
機能
s2が指す配列からn個以下の文字を、s1が指す文字列の最後に付加する。
s2の先頭の文字が、s1が指す文字列の最後のナル文字を書き換える。
終端ナル文字を常に結果に付加する。
s1とs2が重なっている場合、その動作は未定義である。
返却値はs1の値を返す。
例
int main(void) {
  char s1[16] = "abc";
  char s2[16] = "def";
  printf("付加前のs1の値：%s\n", s1);
  printf("付加前のs2の値：%s\n", s2);
  strncat(s1, s2, 2);
  printf("付加後のs1の値：%s\n", s1);
  printf("付加後のs2の値：%s\n", s2);
}
『JISX3010:2003』p.236「7.21.4 比較関数」
比較関数memcmp, strcmp及びstrncmpが返す0以外の値の符号は、
比較対象のオブジェクトにおいて最初に異なる文字の対
（いずれの文字の型もunsigned char として解釈する）、
の値の差の符号によって決定する。
形式
int memcmp(const void *s1, const void *s2, size_t n);
引数
返却値
機能
s1が指すオブジェクトの始めのn文字と、s2が指すオブジェクトの始めのn文字を比較する。
返却値はs1がs2より大きいか、等しいか、又は小さいかによって、それぞれ、0より大きい、0に等しい、又は0より小さい整数を返す。
例 : 
int main(void) {
  char s1[] = {'a', 'b', 'c'};
  char s2[] = {'a', 'd', 'e'};
  int ary[] = {0, 1, 2, 3, -1};
  for (int i = 0; ary[i] >= 0; i++) {
    printf("s1とs2の初めの%d文字を比較すると、", ary[i]);
    int result = memcmp(s1, s2, i);
    if (result == 0) {
      puts("s1とs2は等しい。");
    } else if (result > 0) {
      puts("s1はs2より大きい。");
    } else if (result < 0) {
      puts("s1はs2より小さい。");
    } else {
      fprintf(stderr, __FILE__ "(%d): result = %d; 本来この節に処理が廻ってくることはありません。", __LINE__, result);
      exit(1);
    }
  }
}
実行結果:
s1とs2の初めの0文字を比較すると、s1とs2は等しい。
s1とs2の初めの1文字を比較すると、s1とs2は等しい。
s1とs2の初めの2文字を比較すると、s1はs2より小さい。
s1とs2の初めの3文字を比較すると、s1はs2より小さい。
形式
int strcmp(const char *s1, const char *s2);
引数
返却値
機能
s1が指す文字列とs2が指す文字列を比較する。
返却値はs1が指す文字列が、s2が指す文字列より大きいか、等しいか、又は小さいかによって、それぞれ、0より大きい、0に等しい、又は0より小さい整数を返す。
例
int main(void) {
  char s1[] = "abc";
  char s2[] = "ade";
  int result = strcmp(s1, s2);
  if (result == 0)
    printf("s1とs2を比較すると、s1はs2と等しい。\n");
  else if (result > 0)
    printf("s1とs2を比較すると、s1はs2より大きい。\n");
  else if (result < 0)
    printf("s1とs2を比較すると、s1はs2より小さい。\n");
}
形式
int strcoll(const char *s1, const char *s2);
引数
返却値
機能
s1が指す文字列とs2が指す文字列を比較する。
このとき、いずれの文字列も、その時点のロケールのLC_COLLATEカテゴリに従って解釈する。
返却値は、s1が指す文字列及びs2が指す文字列をその時点のロケールに従って解釈したとき、s1が指す文字列が、s2が指す文字列より大きいか、等しいか、又は小さいかによって、それぞれ、0より大きい、0に等しい、又は0より小さい整数を返す。
例
int main(void) {
  char s1[] = "abc";
  char s2[] = "ABC";
  setlocale(LC_COLLATE, "C");
  int result = strcoll(s1, s2);
  if (result == 0)
    printf("s1とs2を\"C\"ロケールで比較すると、s1はs2と等しい。\n");
  else if (result > 0)
    printf("s1とs2を\"C\"ロケールで比較すると、s1はs2より大きい。\n");
  else if (result < 0)
    printf("s1とs2を\"C\"ロケールで比較すると、s1はs2より小さい。\n");
  setlocale(LC_COLLATE, "JPN");
  result = strcoll(s1, s2);
  if (result == 0)
    printf("s1とs2を\"JPN\"ロケールで比較すると、s1はs2と等しい。\n");
  else if (result > 0)
    printf("s1とs2を\"JPN\"ロケールで比較すると、s1はs2より大きい。\n");
  else if (result < 0)
    printf("s1とs2を\"JPN\"ロケールで比較すると、s1はs2より小さい。\n");
}
形式
int strncmp(const char *s1, const char *s2, size_t n);
引数
返却値
機能
s1が指す配列をs2が指す配列と比較する。
比較する文字はn文字以下とする。（ナル文字に続く文字は比較しない）返却値は、s1が指す配列（ナル文字で終了しうる）が、s2が指す配列（ナル文字で終了しうる）より大きいか、等しいか、又は小さいかによって、それぞれ、0より大きい、0に等しい、又は0より小さい整数を返す。
例
int main(void) {
  char s1[] = "abc";
  char s2[] = "ade";
  int result = strncmp(s1, s2, 1);
  if (result == 0)
    printf("s1とs2の初めの1文字を比較すると、s1はs2と等しい。\n");
  else if (result > 0)
    printf("s1とs2の初めの1文字を比較すると、s1はs2より大きい。\n");
  else if (result < 0)
    printf("s1とs2の初めの1文字を比較すると、s1はs2より小さい。\n");
  result = strncmp(s1, s2, 4);
  if (result == 0)
    printf("s1とs2の初めの4文字を比較すると、s1はs2と等しい。\n");
  else if (result > 0)
    printf("s1とs2の初めの4文字を比較すると、s1はs2より大きい。\n");
  else if (result < 0)
    printf("s1とs2の初めの4文字を比較すると、s1はs2より小さい。\n");
}
形式
size_t strxfrm(char * restrict s1, const char * restrict s2, size_t n);
引数
返却値
機能
s2が指す文字列を変換し、その結果の文字列をs1が指す配列に格納する。
その変換は次の通りとする。
すなわち、strcmp関数を変換結果の2つの文字列に適用した場合、strcmp関数が0より大きい値を返すか、0を返すか、又は0より小さい値を返すかは、2つの変換前の文字列をstrcoll関数に適用した結果と一致する。
終端ナル文字を含めて、n個を超える文字を、s1が指す結果の配列に格納することはない。
nが0である場合、s1は空ポインタであってもよい。
s1とs2が重なっている場合、その動作は未定義である。
返却値は、変換した結果の文字列（終端ナル文字は含まない）の長さを返す。
返却された値がn以上の場合、s1が指す配列の内容は不定とする。
例
int main(void) {
  char s1[16];
  char s2[] = "abc";
  setlocale(LC_COLLATE, "JPN");
  strxfrm(s1, s2, 16);
  printf("\ns1の値；");
  for (char *p = s1; *p != '\0'; p++)
    printf("%2x ", *p);
}
『JISX3010:2003』p.236「7.21.5 探索関数」
形式
void *memchr(const void *s, int c, size_t n);
引数
返却値
機能
sが指すオブジェクトの先頭のn文字（各々unsigned char型として解釈する。）の中でc（unsigned char型に型変換する。）が最初に現れる位置を捜す。
返却値は、捜し出した文字へのポインタを返す。
オブジェクトの中にその文字が現れない場合、空ポインタを返す。
例
int main(void) {
  char s[6] = {'a', 'b', 'c', 'd', 'e', 'f'};
  char *p = memchr(s, 'd', 3);
  if (p != NULL)
    printf("sの初めの3文字の中で'd'が最初に現れる位置は[%d]。\n", p - s);
  else
    printf("sの初めの3文字の中で'd'は現れない。\n");
  p = memchr(s, 'd', 6);
  if (p != NULL)
    printf("sの初めの6文字の中で'd'が最初に現れる位置は[%d]。\n", p - s);
  else
    printf("sの初めの6文字の中で'd'は現れない。\n");
}
形式
char *strchr(const char *s, int c);
引数
返却値
機能
sが指す文字列の中で、c（char型に型変換する。）が最初に現れる位置を捜す。
終端ナル文字は文字列の一部とみなす。
返却値は、捜し出した文字へのポインタを返す。
文字列の中にその文字が現れない場合、空ポインタを返す。
例
int main(void) {
  char s[] = "abcdef";
  char *p = strchr(s, 'd');
  if (p != NULL)
    printf("sの中で'd'が最初に現れる位置は[%d]。\n", p - s);
  else
    printf("sの中で'd'は現れない。\n");
}
形式
size_t strcspn(const char *s1, const char *s2);
引数
返却値
機能
s1が指す文字列の中で、s2が指す文字列中の文字を含まない先頭部分の最大の長さを計算する。
返却値は、その先頭部分の長さを返す。
例
int main(void) {
  char s1[] = "abcdef";
  char s2[] = "abc";
  char s3[] = "def";
  int len = strcspn(s1, s2);
  printf("%sの中で%sの文字群が含まれない先頭部分の最大の長さは%dです。\n", s1,
         s2, len);
  len = strcspn(s1, s3);
  printf("%sの中で%sの文字群が含まれない先頭部分の最大の長さは%dです。\n", s1,
         s3, len);
}
形式
char *strpbrk(const char *s1, const char *s2);
引数
返却値
機能
s1が指す文字列の中で、s2が指す文字列の中のいずれかの文字が最初に現れる位置を捜す。
返却値は、その文字へのポインタを返す。
s1が指す文字列の中に、s2が指す文字列の中のいずれの文字も現れない場合、空ポインタを返す。
例
int main(void) {
  char s1[] = "abcdef";
  char s2[] = "abc";
  char s3[] = "def";
  char *p = strpbrk(s1, s2);
  if (p != NULL)
    printf("%sの中で%sの文字群が最初に現れる位置は[%d]です。\n", s1, s2,
           p - s1);
  else
    printf("%sの中で%sの文字群は現れない。\n", s1, s2);
  p = strpbrk(s1, s3);
  if (p != NULL)
    printf("%sの中で%sの文字群が最初に現れる位置は[%d]です。\n", s1, s3,
           p - s1);
  else
    printf("%sの中で%sの文字群は現れない。\n", s1, s3);
}
形式
char *strrchr(const char *s, int c);
引数
返却値
機能
sが指す文字列の中で、c（char型に型変換する。）が最後に現れる位置を捜す。
終端ナル文字は文字列の一部とみなす。
返却値はその文字へのポインタを返す。
文字列の中にcが現れない場合、空ポインタを返す。
例
int main(void) {
  char s[] = "abcdefabcdef";
  char *p = strrchr(s, 'd');
  if (p != NULL)
    printf("%sの中で'd'が最後に現れる位置は[%d]です。\n", s, p - s);
  else
    printf("%sの中で'd'は現れない。\n", s);
}
形式
size_t strspn(const char *s1, const char *s2);
引数
返却値
機能
s1が指す文字列の中で、s2が指す文字列中の文字だけを含む先頭部分の最大の長さを計算する。
返却値は、その先頭部分の長さを返す。
例
int main(void) {
  char s1[] = "abcdef";
  char s2[] = "abc";
  char s3[] = "def";
  int len = strspn(s1, s2);
  printf("%sの中で%sの文字群が含まれる先頭部分の最大の長さは%dです。\n", s1, s2,
         len);
  len = strspn(s1, s3);
  printf("%sの中で%sの文字群が含まれる先頭部分の最大の長さは%dです。\n", s1, s3,
         len);
}
形式
char *strstr(const char *s1, const char *s2);
引数
返却値
機能
s1が指す文字列の中で、s2が指す文字列の中の文字の並び（終端ナル文字を除く。）が最初に現れる位置を捜す。
返却値は、探し出した文字列へのポインタを返す。
その文字列が見つからなかった場合、空ポインタを返す。
s2が長さ0の文字列を指す場合、s1を返す。
例
int main(void) {
  char s1[] = "abcdef";
  char s2[] = "abc";
  char s3[] = "def";
  char *p = strstr(s1, s2);
  printf("%sの中で%sの文字列が最初に現れる位置は[%d]です。\n", s1, s2, p - s1);
  p = strstr(s1, s3);
  printf("%sの中で%sの文字列が最初に現れる位置は[%d]です。\n", s1, s3, p - s1);
}
形式
char *strtok(char * restrict s1, char * restrict s2);
引数
返却値
機能
strtok関数の一連の呼び出しは、s1が指す文字列を、s2が指す文字列の中のいずれかの文字で区切られる字句の列に分割する。
一連の呼び出しの最初の呼び出しでは、第1実引数として空ポインタ以外を指定する。
それ以降の呼び出しでは、第1実引数として空ポインタを指定する。
s2が指す区切り文字は、呼出しごとに異なっていてもよい。
一連の呼び出しの中の最初の呼び出しでは、s2が指すその時点での区切り文字列に含まれない最初の文字を、s1が指す文字列中で捜す。
その文字が見つからない場合、s1が指す文字列には字句が存在せず、strtok関数は空ポインタを返す。
その文字が見つかった場合、それを最初に字句の始まりとする。
次に、strtok関数は、見つかった文字の位置からその時点での区切り文字列に含まれている文字を捜す。その文字が見つからない場合、その時点の字句をs1が指す文字列の最後までとみなし、次回以降の探索では空ポインタを返す。
その文字が見つかった場合、その文字をナル文字で書き換え、その時点の字句を終了させる。
strtok関数はその次の文字へのポインタを保持しておき、字句の次の探索はそこから開始する。
第1実引数の値が空ポインタを持つ2回目以降の各呼び出しでは、保持したポインタが指すところから探索を開始する以外は、これと同じ動作をする。
処理系は、いかなるライブラリ関数もstrtok関数を呼び出さない場合の動作と同じ動作をしなければならない。
返却値は、字句の最初の文字へのポインタを返す。
字句が存在しない場合、空ポインタを返す。
例
int main(void) {
  char str[] = "abc def,ghi.";
  char *p = strtok(str, " ,.");
  printf("%s\n", p);
  while (p != NULL) {
    p = strtok(NULL, " ,.");
    printf("%s\n", p);
  }
}
『JISX3010:2003』p.239「7.21.6 その他の関数」
形式
void *memset(void *s, int c, size_t n);
引数
返却値
機能
c(unsigned char型に型変換する。)の値を、sが指すオブジェクトの最初のn文字のそれぞれにコピーする。
返却値は、sの値を返す。
例
int main(void) {
  char s[6];
  memset(s, 'a', 6);
  printf("\nsの値：");
  for (int i = 0; i < 6; i++)
    printf("%2x ", s[i]);
}
形式
char *strerror(int errnum);
引数
返却値
機能
strerror関数は、errnumの数値をメッセージ文字列にマッピングします。
通常、errnum の値は errno に由来しますが、strerror は int 型のあらゆる値をメッセージにマッピングします。
strerror 関数は、他の strerror 関数の呼び出しとのデータ競合を回避する必要はありません。
実装では、どのライブラリ関数も strerror 関数を呼び出さないかのように動作するものとします。
返却値
strerror関数は、ロケール固有の内容を持つ文字列へのポインタを返します。
指し示された配列は、プログラムによって変更されてはなりません。
しかし、後続の strerror 関数の呼び出しによって上書きされる可能性があります。
[https://paiza.io/projects/FyWzzYwsTlm-ylUpxrIQJw?language=c 例] : 
int main(void) {
  for (int errnum = 0; errnum < 50; errnum++)
    printf("%2d: %s\n", errnum, strerror(errnum));
}
関連項目
形式
size_t strlen(const char *s);
引数
返却値
機能
sが指す文字列の長さを計算する。
返却値は、終端ナル文字に先行する文字の個数を返す。
例
int main(void) {
  char s[] = "abcdef";
  int len = strlen(s);
  printf("%sの長さは%dです。\n", s, len);
}