string.h

string.h 中的功能, 与其说是处理字符串, 不如说是在处理字节数组, 像复制一块内存之类的函数.

如果想要格式化字符串, 需要使用 stdio.h 中的 sprintf() 函数.

函数

内存区域

void *memchr(const void *str, int ch, size_t size)

在 str 所指的内存区域前 size 字节中查找第一个出现 ch 字节的位置

返回:第一次出现 ch 的地址 (包括此字节)
int memcmp(const void *a, const void *b, size_t size)

比较 a, b 的前 size 个字节. 从低位到高位一个字节一个字节地比较, 当低位出现一个较小的字节时, 判断为小于, 以此类推.

返回:
  • -1, 表示 a < b
  • 0, 表示 a == b
  • 1, 表示 a > b
void *memcpy(void *dest, const void *src, size_t size)

从 src 到 dest 复制前 size 个字节.

参数:
  • src – 源内存区域
  • dest – 目标内存区域
  • size – 将复制的字节数目
void *memmove(void *dest, const void *src, size_t size)

从 src 移动 size 个字节到 dest 中. 如果 dest 与 src 在 size 字节内有重叠, 则此函数将保证 dest 被正确的修改, 而 src 函数可能被更改. 否则此函数作用与 memcpy() 相同.

void *memset(void *dest, int ch, size_t size)

将 dest 的前 size 字节用 ch 填充. 这个函数也常用于设置其他类型的数组.

参数:
  • ch – ch 虽然用 int 类型传入, 但是实际却是当作 unsigned int 类型.

字符串

char *strcat(char *dest, const char *src)

将 src 追加到 dest 后. dest 是一个 C-style 字符串, 要求能够容纳追加后的字符串.

返回:dest 的地址
char *strncat(char *dest, const char *src, size_t n)

将 src 追加到 dest 后. dest 是一个 C-style 字符串, 要求能够容纳追加后的字符串. 最多追加 n 个字节.

参数:
  • n (size_t) – 最大追加的字节数
返回:

dest 的地址

char *strchr(const char *str, int ch)

在参数 str 所指的字符串中搜索第一次出现字符 ch 的位置

参数:
  • ch – 虽然以 int 类型传入, 但是实际上用作 unsigned int 类型.
返回:

返回 ch 出现的地址(包括此字符)

char *strrchr(const char *str, int ch)

搜索 str 中最后一次出现字符 ch 的地址.

size_t strcspn(const char *a, const char *b)

搜索 a 中第一次出现 b 中字符的位置. 返回的是偏移量, 基准位置是 a 的首地址.

返回:b 中包含的字符第一次在 a 中出现的地址偏移量
size_t strspn(const char *a, const char *b)

在 a 中检索第一个不在 b 中出现的字符的地址偏移量

char *strpbrk(const char *a, const char *b)

类似于 strcspn(), 在 a 中检索 b 中的字符, 返回第一次出现的字符的地址.

返回:b 中包含的字符第一次在 a 中出现的地址
char *strstr(const char *str, const char *target)

在 str 中搜索第一次出现 target 字串的地址.

char *strtok(char *str, const char *delimeter)

将 str 拆分成子字符串, delimeter 作为分隔符. 一次调用将会返回一个子串, 当字符串无法再被拆分将会返回 NULL.

参数:
  • delimeter – 分隔符
返回:

一次调用返回一个子串, 当无法继续拆分时返回 NULL.

char *strcmp(const char *a, const char *b)

类似于 memcmp(), 但只针对字符串, 以 \0 终止.

char *strcmp(const char *a, const char *b, size_t n)

类似于 memcmp(), 但只针对字符串, 比较前 n 个字节.

int strcoll(const char *a, const char *a)

比较两个字符串的 “大小”, 根据 LC_COLLATE 的设置 [2]

char *strcpy(char *dest, const char *src)

将 src 复制到 dest

char *strncpy(char *dest, const char *src, size_t n)

将 src 复制到 dest, 最多 n 个字节.

char *strerror(int errno)

传入 C 错误码, 在内部数组中搜索并返回对应的错误信息.

参数:
  • errno – 常用 errno.h 中的 errno 宏.
返回:

错误码对应的字符串消息

size_t strlen(const char *str)

返回 str 的长度, 单位字节. 以 \0 结束.

size_t strxfrm(char *dest, const char *src, size_t n)

根据 LC_COLLATE 区域设置 [2] , 将 src 转换, 并将结果存入 dest 中.

[2](1, 2) 参考 https://zh.cppreference.com/w/c/locale/LC_categories, 定义在 locale.h 中.