这个章节,我们探讨C语言常用字符串函数。
重点介绍处理字符和字符串的库函数的使用和注意事项
如有兴趣也可以看看 字符串函数如何模拟实现
字符串函数头文件 #include<string.h>
gets (fgets)字符串输入函数文件 #include<stdio.h>
strlen
该函数是求字符串长度的。
size_t strlen ( const char * str );
相信大多数人对该字符串函数比较熟悉了,那我们看看直接看看注意事项吧,第三点大家可能比较容易忽略!。
注意事项
- 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符
个数(不包含 ‘\0’ )。
- 参数指向的字符串必须要以 ‘\0’ 结束。
- 注意函数的返回值为size_t,是无符号的( 易错 )
下面输出的结果什么??
#include<string.h> int main() { if (strlen("abc") - strlen("abcdef") > 0) { printf(">"); } else { printf("<"); } return 0; }
解析:
答案是:>
因为 函数的返回值为size_t,是个无符号整型、 两个无符号的数相减在内存补码存储的还是正数,所以打印了>
strcpy
字符串复制(拷贝)函数
char* strcpy(char * destination, const char * source );
参数说明:
destination:表示复制的目标字符数组;
source:表示复制的源字符数组
注意事项
- 将源指向的 C 字符串复制到目标指向的数组中,包括终止的 null 字符(并在该点停
止)。
- 源字符串必须以 ‘\0’ 结束。
- 会将源字符串中的 ‘\0’ 拷贝到目标空间
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
函数使用方法:
#include<string.h> int main() { char arr1[20] = "abc"; char arr2[] = "abcdef"; strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
最终输出结果:
abcdef
strcat
将两个字符串连接(拼接)起来。
char * strcat ( char * destination, const char * source );
参数说明
Destination:目的字符串;
Source:源字符串。
返回值:
该函数返回一个指向最终的目标字符串 Destination 的指针。
注意事项:
- 将源字符串的副本追加到目的字符串后面。目的中的最后一个 ‘\0’ 字符,被源的第一
个字符覆盖,并且在目的中由两者串联形成的新字符串的末尾包含一个’ \0’。
- 源字符串必须以 ‘\0’ 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改
- 字符串不能自己给自己追加!。自己给自己追应用strncat库函数
函数使用方法:
#include<string.h> int main() { char arr1[20] = "abc"; char arr2[] = "def"; strcat(arr1, arr2); printf("%s\n", arr1); return 0; }
最终输出结果:abcdef
strcmp
字符串比较,把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
int strncmp ( const char * str1, const char * str2, size_t num );
参数说明:
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。
标准规定:返回值
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
函数使用方法:
#include <stdio.h> #include <string.h> int main () { char str1[] = "abcdef"; char str2[] = "ABCDEF"; int ret = 0; ret = strcmp(str1, str2); if(ret < 0) { printf("str1 小于 str2"); } else if(ret > 0) { printf("str1 大于 str2"); } else { printf("str1 等于 str2"); } return 0 ; }
最终输出结果:
str1 大于 str2
strncpy
复制字符串source中的内容—到字符串destination中,复制多少由num的值决定。
char * strncpy ( char * destination, const char * source, size_t num );
参数说明:
destination:表示复制的目标字符数组;
source:表示复制的源字符数组;
num:表示复制的字符串长度。
返回值
该函数返回最终复制的字符串。
注意事项
- 将源的第一个字符数复制到目标字符。如果在复制 num 个字符之前找到源 C 字符串的
末尾(由空字符表示),则用零填充目标,直到总共写入 num 个字符为止。
- 拷贝num个字符从源字符串到目标空间。
- 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到
num个。
- strncpy 没有自动加上终止符的,需要手动加上不然会出问题的。
函数使用方法:
#include <stdio.h> #include <string.h> int main() { char destination[40] = "This is destination"; char source[] = "This is source"; strncpy(destination, source, 10); //strncpy 没有自动加上终止符的,需要手动加上不然会出问题的。 destination[10] = '\0'; printf("最终的目标字符串: %s\n", destination); return 0; }
最终输出结果:
最终的目标字符串: This is sostination
strncat
追加子符串str2 中的内容—到字符串 str1 的结尾,增加多少由num的值决定。
int strncmp ( const char * str1, const char * str2, size_t num );
参数说明:
str1 – 指向目标数组
str2 – 要追加的字符串
num --要追加的最大字符数
返回值:
该函数返回一个指向最终的目标字符串 str1 的指针。
注意事项
- 将str2的第一个字符开始追加到目标,外加一个终止 ‘\0’ 字符。
- 如果str2 中 C 字符串的长度小于 num,则仅复制终止字符之前的内容。
- str1 空间要足够大 不然会越界访问
函数使用方法:
#include <stdio.h> #include <string.h> int main() { char str1[50] = "This is str1"; char str2[50] = "This is str2"; strncat(str1, str2, 15); printf("最终的目标字符串:%s", str1); return 0 ; }
最终输出结果:
最终的目标字符串:This is str1This is str2