序
近日在LeetCode上刷题,发现string.h内容忘差不多了,随手记一记(指复制粘贴)
string.h定义的类型
size_t
其实就是个无符号整数(具体类型与编译器实现相关)。同时也是sizeof关键字所返回的类型。
string.h定义的宏
NULL
不用再解释了吧。
#define NULL ((void *)0)
string.h定义的函数
mem系
memchr
void *memchr(const void *str, int c, size_t n)
返回 str 所指向的内存中前 n 个字节里第一次出现的(无符号)字符 c 的指针。
memcmp
int memcmp(const void *str1, const void *str2, size_t n)
比较从 str1 开始的 n 个字节与从 str2 开始的 n 个字节。
(cmp -> compare)
memcpy
void *memcpy(void *dest, const void *src, size_t n)
将以 src 为起点的 n 个字节复制到以 dest 为起点的 n 个字节。
memmove
void *memmove(void *str1, const void *str2, size_t n)
类似memcpy,但更安全。
如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。(来源:菜鸟教程)
memset
void *memset(void *str, int c, size_t n)
设置以 str 为起点,位移 +n 的地址的值为 c。
str系
strcat
char *strcat(char *dest, const char *src)
把src所指向的字符串接到dest所指向的字符串的末尾。
返回一个指向最终的目标字符串 dest 的指针
strncat
char *strncat(char *dest, const char *src, size_t n)
将 scr 所指向的字符串的前 n 个字符复制到 dest 所指向的字符串的末尾。
strchr
char *strchr(const char *str, int c)
搜索 str 所指向的字符串中第一次出现的(无符号)字符 c 并返回其指针。
strcmp
int strcmp(const char *str1, const char *str2)
比较 str1 , str2 两者所指向的字符串的内容。
strncmp
int strncmp(const char *str1, const char *str2, size_t n)
比较 str1 , str2 两者所指向的字符串的内容,但只比较前 n 个字符。
strcoll
int strcoll(const char *str1, const char *str2)
与Localization support有关,暂时无法理解。
把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。
strcpy
char *strcpy(char *dest, const char *src)
将 src 所指向的字符串复制到 dest。
strncpy
char *strncpy(char *dest, const char *src, size_t n)
将 src 所指向的字符串复制到 dest,但只复制前 n 个字符。
strcspn
size_t strcspn(const char *str1, const char *str2)
返回 str1 中第几个字符与 str2 的某一个字符相同。
strerror
char *strerror(int errnum)
起初我不太理解,但看到这行:
C 库函数 char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。strerror 生成的错误字符串取决于开发平台和编译器。(菜鸟教程)
似乎是配合errno.h获取最近的报错描述字符串的。
使用列如下。
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt","r");
if( fp == NULL )
{
printf("Error: %s\n", strerror(errno));
}
return(0);
}
//输出:Error: No such file or directory
strlen
size_t strlen(const char *str)
返回 str 所指向的字符串的长度(直到但不包括\0)。
strpbrk
char *strpbrk(const char *str1, const char *str2)
依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
strrchr
char *strrchr(const char *str, int c)
在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
strspn
size_t strspn(const char *str1, const char *str2)
检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
strstr
所以这是什么鬼名字
char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
strtok
char *strtok(char *str, const char *delim)
分解字符串 str 为一组字符串,delim 为分隔符。
strxfrm
size_t strxfrm(char *dest, const char *src, size_t n)
也与Localization support有关,还是无法理解。
根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。
末
string.h中同时包括了memxxx和strxxx函数,很明显,这是因为char既是byte。一般来说,char的二进制占8位,共计1字节。
参考资料
菜鸟教程 : C 标准库 - <string.h>
腾讯云开发者社区开发者手册 : 本地化支持 | Localization support