跳转至

string

头文件清单

#include <string.h>

接口清单

接口名称 功能简述
stpcpy 将源字符串复制到目标数组,返回指向目标字符串末尾的指针
stpncpy 将源字符串的前n个字符复制到目标数组,返回指向目标字符串末尾的指针
strcoll_l 根据指定区域设置的LC_COLLATE规则比较两个字符串
strdup 复制字符串到新申请的内存中
strerror_l 根据错误码和指定区域设置返回对应的错误消息字符串指针
strerror_r 根据错误码返回错误消息字符串到用户提供的缓冲区(可重入)
strnlen 返回字符串的长度,不超过指定的最大长度
strtok_r 根据分隔符集合分割字符串(可重入)
strxfrm_l 根据指定区域设置的LC_COLLATE规则转换字符串

Functions

stpcpy

函数声明

char *stpcpy(char *__restrict, const char *__restrict)

头文件清单

#include <string.h>

功能说明

  • 将源字符串复制到目标字符数组中,包括末尾的空字符
  • 返回指向目标字符串末尾空字符之后位置的指针
  • 目标缓冲区须有足够空间容纳源字符串

入参

名称 参数类型 详细说明 约束取值范围
d char *__restrict 目标字符数组指针 非空,指向的缓冲区大小须不小于源字符串长度+1
s const char *__restrict 源字符串指针 非空,须指向以空字符结尾的字符串

出参

名称 数据类型 输出说明
d char * 复制后的目标字符数组,包含源字符串的完整内容

返回值

返回值 文字含义 触发场景
char *指针 指向目标字符串末尾空字符之后的位置 复制完成

stpncpy

函数声明

char *stpncpy(char *__restrict, const char *__restrict, size_t)

头文件清单

#include <string.h>

功能说明

  • 将源字符串的前n个字符复制到目标数组中
  • 若源字符串长度小于n,则在目标数组剩余位置填充空字符
  • 返回指向目标字符串末尾的指针

入参

名称 参数类型 详细说明 约束取值范围
d char *__restrict 目标字符数组指针 非空,指向的缓冲区大小须不小于n
s const char *__restrict 源字符串指针 非空,须指向以空字符结尾的字符串
n size_t 最大复制字符数 0 ~ SIZE_MAX

出参

名称 数据类型 输出说明
d char * 复制后的目标字符数组

返回值

返回值 文字含义 触发场景
char *指针 指向目标字符串末尾的指针 复制完成

strcoll_l

函数声明

int strcoll_l(const char *, const char *, locale_t)

头文件清单

#include <string.h>

功能说明

  • 根据指定区域设置的LC_COLLATE规则比较两个字符串
  • 当前实现按照strcmp方式按码点比较
  • 比较结果受locale_t参数指定的区域设置影响

入参

名称 参数类型 详细说明 约束取值范围
l const char * 待比较的左侧字符串指针 非空
r const char * 待比较的右侧字符串指针 非空
loc locale_t 区域设置句柄 有效的locale_t对象

返回值

返回值 文字含义 触发场景
小于0的整数 左侧字符串小于右侧字符串 按区域规则比较结果为小于
0 两个字符串相等 按区域规则比较结果为相等
大于0的整数 左侧字符串大于右侧字符串 按区域规则比较结果为大于

strdup

函数声明

char *strdup(const char *)

头文件清单

#include <string.h>

功能说明

  • 复制字符串到新申请的内存中
  • 通过malloc分配足够的内存空间存放源字符串的副本
  • 调用者须负责释放返回的内存

入参

名称 参数类型 详细说明 约束取值范围
s const char * 源字符串指针 非空,须指向以空字符结尾的字符串

返回值

返回值 文字含义 触发场景
char *非空指针 指向新分配内存中字符串副本的指针 内存分配成功
NULL 内存分配失败 malloc分配内存失败

strerror_l

函数声明

char *strerror_l(int, locale_t)

头文件清单

#include <string.h>

功能说明

  • 根据错误码和指定区域设置返回对应的错误消息字符串指针
  • 在指定locale下将错误码转换为可读的错误描述
  • 若错误码超出已知范围,返回未知错误描述

入参

名称 参数类型 详细说明 约束取值范围
e int 错误码 有效的errno值
loc locale_t 区域设置句柄 有效的locale_t对象

返回值

返回值 文字含义 触发场景
char *指针 指向错误消息字符串的指针 正常返回

strerror_r

函数声明

int strerror_r(int, char *, size_t)

头文件清单

#include <string.h>

功能说明

  • 根据错误码返回错误消息字符串到用户提供的缓冲区(可重入版本)
  • 将错误码对应的错误描述复制到buf指向的缓冲区中
  • 若缓冲区不足以容纳完整的错误消息,则截断并保证以空字符结尾

入参

名称 参数类型 详细说明 约束取值范围
err int 错误码 有效的errno值
buf char * 用户提供的缓冲区指针 非空
buflen size_t 缓冲区大小 1 ~ SIZE_MAX

出参

名称 数据类型 输出说明
buf char * 存放错误消息字符串的缓冲区,以空字符结尾

返回值

返回值 文字含义 触发场景
0 执行成功 错误消息完整写入缓冲区
ERANGE 缓冲区不足 错误消息长度大于等于buflen

strnlen

函数声明

size_t strnlen(const char *, size_t)

头文件清单

#include <string.h>

功能说明

  • 返回字符串的长度,不超过指定的最大长度maxlen
  • 在字符串的前maxlen个字节中查找空字符,返回空字符前的字节数
  • 若前maxlen个字节中无空字符,则返回maxlen

入参

名称 参数类型 详细说明 约束取值范围
s const char * 字符串指针 非空
maxlen size_t 最大扫描长度 0 ~ SIZE_MAX

返回值

返回值 文字含义 触发场景
size_t 字符串长度,不超过maxlen 正常返回

strtok_r

函数声明

char *strtok_r(char *__restrict, const char *__restrict, char **__restrict)

头文件清单

#include <string.h>

功能说明

  • 根据分隔符集合分割字符串(可重入版本)
  • 通过第三个参数保存分割上下文,支持嵌套调用
  • 每次调用返回指向下一个非分隔符Token的指针,并修改原字符串

入参

名称 参数类型 详细说明 约束取值范围
s char *__restrict 待分割的字符串指针,首次调用传入待分割字符串,后续调用传入NULL 首次调用时非空,后续可为NULL
sep const char *__restrict 分隔符集合字符串 非空

出参

名称 数据类型 输出说明
p char ** 保存分割上下文的指针,函数通过此参数记录当前分割位置

返回值

返回值 文字含义 触发场景
char *非空指针 指向下一个Token的指针 找到新的Token
NULL 无更多Token 字符串已全部分割完毕

strxfrm_l

函数声明

size_t strxfrm_l(char *__restrict, const char *__restrict, size_t, locale_t)

头文件清单

#include <string.h>

功能说明

  • 根据指定区域设置的LC_COLLATE规则转换字符串src
  • 将转换后的字符串写入dest,转换结果可用于strcmp比较以获得与strcoll相同的排序结果
  • 若n小于src的长度,则不进行转换,仅返回src的长度

入参

名称 参数类型 详细说明 约束取值范围
dest char *__restrict 目标缓冲区指针 若n足够则为有效指针
src const char *__restrict 源字符串指针 非空
n size_t 目标缓冲区最大字节数 0 ~ SIZE_MAX
loc locale_t 区域设置句柄 有效的locale_t对象

出参

名称 数据类型 输出说明
dest char * 转换后的字符串(当n大于src长度时写入)

返回值

返回值 文字含义 触发场景
size_t 转换后字符串的完整长度 正常返回(若返回值大于等于n,则dest内容不完整)

Type definitions

locale_t

typedef struct __locale_struct * locale_t;

使用说明 作为strcoll_l、strerror_l、strxfrm_l接口的区域设置参数类型

Macros

NULL

#define NULL ((void*)0)

使用说明 空指针常量,在string.h中根据编译环境条件定义。C++环境下定义为0Lnullptr,C环境下定义为((void*)0)