string.h#
string.h提供了一系列内存和字符串操作函数.
- 待办事项:
需要进行测试, 以测试函数正确性
实现debug.h后需要给每个指针添加 NULL 检查
- Author
Shihong Wang (jack4shihong@gmail.com)
- Version
0.1
- Date
2023-04-08
- Copyright
Copyright Shihong Wang (c) 2023 with GNU Public License V3.0
Warning
为了避免编译时编译器使用系统的string.h库, 编译时需要为GCC指定-nostdinc选项, 详见根目录下的Makefile
Functions
-
size_t memset(void *dst, byte value, size_t size)#
memset将det_起始的size个字节的内存单元的值设置为value- Parameters:
dst – 起始地址
value – 设置的值
size – 要设置多少个字节
- Returns:
size_t 成功设置的字节数
-
size_t strmset(void *dst, char value, size_t size)#
strmset是针对字符串复制的安全实现,避免了字符串复制时可能存在的缓存区溢出,将det_起始的size个字节的内存单元的值设置为value- Parameters:
dst – 起始地址
value – 设置的值
size – 要设置多少个字节
- Returns:
size_t 成功设置的字节数
-
size_t memcpy(void *dst, const void *src, size_t size)#
memcpy将src起始的size个内存单元的值(以字节计算)复制到dst起始的size个内存单元中Warning
memcpy不会进行长度检查, 注意src和dst的长度, 以避免溢出- Parameters:
dst – 被复制的内存区域的起始地址
src – 复制到的内存区域的起始地址
size – 复制的字节数
- Returns:
size_t 复制的字节数
-
size_t memmove(void *dst, const void *src, size_t size)#
memmove - Copy a block of memory, handling overlaps
Note
与 memcpy() 不同,memmove() 处理重叠缓冲区。 复制发生的过程就像 src 中的字节首先被复制到 不与 src 或 dest 和字节重叠的临时缓冲区 然后从临时缓冲区复制到目标。
Note
此函数用于代替 memcpy() 在可能重叠的内存块之间进行复制。
- Parameters:
dst – Destination buffer
src – Source buffer
size – Size of buffer
- Returns:
size_t return the copied char num
-
int8_t memcmp(const void *a, const void *b, size_t size)#
memcmp用于比较两个分别以a和b为起始地址的的size个字节的内存区域的值- Parameters:
a – 要比较的第一个内存区域的地址
b – 要比较的第二个内存区域的地址
size – 要比较的字节数
- Returns:
int8_t 比较的结果:
若
a>b, 则返回1若
a=b, 则返回0若
a<b, 则返回-1
-
char *strcpy(char *dst, const char *src)#
strcpy复制src指向的以’\0’结尾的字符串到dst指向的字符串去中去Warning
strcpy不会进行长度检查, 注意src和dst的长度, 以避免溢出- Parameters:
dst – 将要复制到的内存地址
src – 被复制的字符串
- Returns:
char* 返回dst的首地址
-
size_t strlen(const char *str)#
strlen返回以’\0’结尾的字符串的长度- Parameters:
str – 要获取长度的字符串
- Returns:
size_t 字符串的长度
-
int8_t strcmp(const char *a, const char *b)#
strcmp比较两个字符串- Parameters:
a – 要比较的第一个字符串
b – 要比较的第二个字符串
- Returns:
int8_t 返回比较的结果
若
a>b, 则返回1若
a=b, 则返回0若
a<b, 则返回-1
-
char *strcat(char *dst, const char *src)#
strcat用于将字符串src拼接到dst后Warning
strcat不会进行长度检查, 注意src和dst的长度, 以避免溢出- Parameters:
dst – 将被拼接到的字符串
src – 将被拼接的字符串
- Returns:
char* 返回dst的首地址
-
char *strchr(const char *str, const uint8_t ch)#
strchr返回字符串从左往右第一次出现字符ch的地址Note
strchr相当于返回字符ch第一次出现的地址- Parameters:
str – 被搜索的字符串
ch – 要搜索的字符
- Returns:
char* 指向字符的指针,
若字符
ch在字符串str中, 则返回字符串第一个ch的地址若字符
ch不在字符串str中, 则返回NULL
-
char *strrchr(const char *str, const uint8_t ch)#
strrchr返回反向字符串第一次出现字符ch的地址Note
strrchr相当于返回字符ch最后一次出现的地址- Parameters:
str – 被搜索的字符串
ch – 要搜索的字符
- Returns:
char*
若字符
ch在字符串str中, 则返回反向字符串第一个ch的地址若字符
ch不在字符串str中, 则返回NULL
-
size_t strchrs(const char *str, const uint8_t ch)#
strchrs返回字符串str中字符ch出现的次数- Parameters:
str – 要被搜索的字符串
ch – 要查询的字符
- Returns:
size_t 字符
ch在字符串str中出现的次数
-
size_t strslice(const char *src, char *dst, int64_t start, int64_t len)#
‘strslice’从src字符串中截取从start的len个字节写入start中;同时检查是否越界,避免缓存区溢出;
- Parameters:
str – 要被截取的字符串
dst – 要被写入的字符串
start – 开始的下标
len – 要截取的长度
- Returns:
size_t 成功截取的长度
-
void encrypt_decrypt(char *str, int len, char key)#
‘encrypt_decrypt’函数通过使用一个异或操作对字符串进行加密,由于异或具有自反的性质没所以该函数同样可以用于解密!
- Parameters:
str – 要被加密的字符串
len – 需要被加密的长度
key – 加密KEY
- Returns:
void return
-
int regu_match(const char *str, const char *pattern, int match_pos[])#
-
void regu_replace(char *str, const char *pattern, const char *replacement, int max_len)#
‘regu_replac’函数通过使用正则表达式对字符串中特定字符串进行一个替换;
- Parameters:
str – 需要被操作的字符串
pattern – 正则匹配模式
replacement – 替换为的字符
max_len – 最大处理长度
- Returns:
void return