C语言中的string头文件解析

时间:2021-10-17 10:09:32

标准库提供了一些函数用于处理字符串,它们的原型位于头文件string.h中。

•string.h头文件定义了一个变量
size_t:这是无符号整数类型,它是 sizeof 关键字的结果。

•定义了一个宏
NULL:这个宏是一个空指针常量的值。

string.h头文件中定义了22个库函数。

其中常用的有:

•memcpy函数

函数原型: void *memcpy(void *dest, const void *src, size_t n);
函数描述:从src复制n个字符到dest。
函数返回:该函数返回一个指向目标存储区 dest 的指针。
特点:
1:src与dest的实际类型与函数无关,实际结果是依据二进制拷贝(binary copy)的。
2:该函数只拷贝n个字符,而不检查src何时出现null。一般拷贝长度都是sizeof(src)。
3:为防止溢出(overflow),dest与src的长度都要至少等于n,且它们之间不能重叠(overlap)。

•memset函数

函数原型:void *memset(void *str, int c, size_t n);
函数描述:复制字符c到str所指向的前n个字符。
函数返回:返回一个指向str存储区的指针。
特点:一般用于给某个存储空间(如struct等)初始化或置零。

•strcat函数

函数原型:char *strcat(char *dest, const char *src);
函数描述:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
函数返回值:返回一个指向最终的目标字符串 dest 的指针。
特点:
1:dest 尾部的null会被src首字符覆盖,新生成的字符串后会加上null。
2:需保证dest指针所指向的空间足够大。
3:dest与src不能重叠。

•strncat函数

函数原型:char *strncat(char *dest, const char *src, size_t n);
函数描述:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
函数返回值:返回一个指向最终的目标字符串 dest 的指针。
特点:
1:当src指针指向空间小于n时,只会在dest上追加到src直线的n为止。
2:其余与strcat相同。

•strchr函数

函数原型:char *strchr(const char *str, int c);
函数描述:在参数 str 所指向的字符串中搜索第一次出现字符 c(unsigned char)的位置。
函数返回值:返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。
特点:
1:注意返回是char *,而不是int

•strcmp函数

函数原型:int strcmp(const char *str1, const char *str2);
函数描述:把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
函数返回:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

•strncmp函数

函数原型:int strncmp(const char *str1, const char *str2, size_t n);
函数描述:比较 str1 所指向的字符串和 str2 所指向的字符串的前n个字符。
函数返回:参考strcmp

•strcpy函数

函数原型:char *strcpy(char *dest, const char *src);
函数描述:把 src 所指向的字符串复制到 dest。
函数返回:返回一个指向最终的目标字符串 dest 的指针。
特点:
1:dest指向的空间足够大
2:dest与src的内存不要重叠

•strncpy函数

函数原型:char *strncpy(char *dest, const char *src, size_t n);
函数描述:把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
函数返回:返回一个指向最终的目标字符串 dest 的指针
特点:
1:当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
2:当 src 的长度大于 n 时,不会有null字符添加到dest的结尾。若要避免字符结尾没有null而出现的错误,需要手动将最后一个字符置为null。
3:一般为了保险起见,常将n置为sizeof(dest)-1,也即利用原有dest结尾的null字符。
4:src与dest内存空间不能重叠。

•strerror函数

函数原型:char *strerror(int errnum);
函数描述:从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。
函数返回:返回一个指向错误字符串的指针,该错误字符串描述了错误 errnum。
特点:
1:strerror 生成的错误字符串取决于开发平台和编译器。

•strlen函数

函数原型:size_t strlen(const char *str);
函数描述:计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
函数返回:返回字符串的长度
特点:
1:遇到null就终止,也就是实际会返回第一个null之前的字符个数。
2:注意与sizeof的区别,sizeof会把null给算上,而strlen不会。

•strstr函数

函数原型:char *strstr(const char *haystack, const char *needle);
函数描述:在字符串 haystack 中查找第一次出现字符串 needle 的位置。
函数返回:返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
特点:
1:匹配过程不包括null字符,但是以null字符停止匹配。

•strtok函数

函数原型:char *strtok(char *str, const char *delim);
函数描述:分解字符串 str 为一组字符串,delim 为分隔符。
函数返回:返回指向被分割出片段的指针,如果没有可检索的字符串,则返回一个空指针。
特点:
1:当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为’\0’字符。
2:在第一次调用时,strtok()必需给予参数s字符串;之后的调用则将参数s设置成NULL。
解释:第一次发现了delim中的字符,将该字符改为null,则此后的分割,就从null字符开始,所以之后的调用将s设置成NULL。

一些不常用的有:

•memchr函数

函数原型:void *memchr(const void *str, int c, size_t n);
函数描述:在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(unsigned char)的位置。
函数返回:返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。

•memcmp函数

函数原型:int memcmp(const void *str1, const void *str2, size_t n));
函数描述:把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
函数返回:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2

•memmove函数

函数原型:void *memmove(void *dest, const void *src, size_t n);
函数描述:从src复制n个字符到dest。
函数返回:返回一个指向目标存储区 dest的指针
特点:
1:在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。
2:如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。

•strrchr函数

函数原型:char *strrchr(const char *str, int c);
函数描述:在参数 str 所指向的字符串中搜索最后一次出现字符 c(unsigned char)的位置。
函数返回:返回 str 中最后一次出现字符 c 的位置。如果未找到该值,则函数返回一个空指针。
特点:
1:null被认为是str的一部分,所以该函数可以用来获得指向字符串结尾的指针。

•strspn函数

函数原型size_t strspn(const char *str1, const char *str2);
函数描述:检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
函数返回:返回 str1 中第一个不在字符串 str2 中出现的字符下标。
特点:
1:若strspn()返回的数值为n,则代表字符串s 开头连续有n 个字符都是属于字符串str2内的字符。
2:检索不包含null字符,但是以null来停止检索。

•strcspn函数

函数原型:size_t strcspn(const char *str1, const char *str2);
函数描述:检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
函数返回:返回 str1 开头连续都不含字符串 str2 中字符的字符数。
特点:
1:检索包含空字符,因此,函数将返回str1的长度如果str1中任一字符都不属于str2。

另有strcoll函数、strpbrk函数、strxfrm函数,用到的可能性更小,用到时可查资料。

参考:
1:http://www.runoob.com/cprogramming/c-standard-library-string-h.html

2:http://www.cplusplus.com/reference/cstring/