1、strlen函数
函数原型 size_t strlen ( const char * str );
1、功能: 返回字符串str的长度
2、注意:
1.字符串的结束标志是’\0’ ,参数指向的字符串必须要以’\0’ 结束。
2.strlen函数返回的是在字符串中’\0’ 前面出现的字符个数(不包含’\0’ )。
3.注意函数的返回值为size_t,是无符号的,即不会有负数!
3、演示代码:
#include<stdio.h> #include<string.h> int main() { char *ch = "abcdef"; //指针ch接收的是字符串的首地址,即'a'的地址 int len=strlen(ch); printf("%d", len); //最后打印的结果是 6 return 0; }
2、strcpy函数
函数原型 char * strcpy ( char * destination, const char * source );
1、功能:将字符串 source 里面的内容拷贝到 destination 里
2、返回值:destination里面字符串的首字符地址
3、注意:
1.目标参数destination的以前内容将被覆盖并丢失。
2.源字符串必须以’\0’ 结束。会将源字符串中的’\0’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4、演示代码
#include<stdio.h> #include<string.h> int main() { char *ch = "abcdef"; char str[20]; strcpy(str, ch); //指针str接收的是字符串的首地址,即'a'的地址 printf("%s", str); //打印的结果为 abcdef return 0; }
3、strcat函数
函数原型 char * strcat ( char * destination, const char * source );
1、功能:将一个字符串 source 添加到另一个字符串 destination 的后面。
2、返回值:destination里面字符串的首字符地址
3、注意:
1.源字符串必须以’\0’ 结束。目标空间必须有足够的大,能容纳下源字符串的内容。
2.该函数不能自己给自己追加字符串,会造成死循环。
4、演示代码
#include<stdio.h> #include<string.h> int main() { char str[20]="abcdef"; char* ch = "ghijklmn"; strcat(str, ch); //指针str接收的是字符串的首地址,即'a'的地址 printf("%s", str); //打印结果是 abcdefghijklmn return 0; }
4、strcmp函数
函数原型 int strcmp ( const char * str1, const char * str2 );
1、功能:比较两个字符串,按字符ASCII码值从第一个开始比较,如果str1小于str2,该函数返回一个小于零的值。如果str大于str2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。
2、返回值:整数
3、注意:字符串不能用等号来比较大小,只能用strcmp函数来比!
4、演示代码
#include<stdio.h> #include<string.h> int main() { char *str="abcdef"; char* ch = "abcdf"; int ret =strcmp(str, ch); //'e'<'f' printf("%d", ret); //打印结果 -1 return 0; }
5、strncpy函数
函数原型 char * strncpy ( char * destination, const char * source, size_t num );
1、功能:将字符串 source 里面的前 num 个字符拷贝到 destination 里,这会造成 destination 前num个字符被覆盖
2、返回值:destination里面字符串的首字符地址
3、注意:
1.该函数与 strcpy 极为相似,只是增加了拷贝的数量控制
2.如果源字符串 source 的长度小于 num,则拷贝完源字符串之后,在目标的后边追加 ‘\0’,直到num个。
4、代码演示
#include<stdio.h> #include<string.h> int main() { char str[20] = "abcdef"; char* ch = "klmn"; strncpy(str, ch,3); printf("%s",str); //打印结果 klmdef return 0; }
6、strncat函数
函数原型 char * strncat ( char * destination, const char * source, size_t num );
1、功能:将一个字符串 source 前 num 个字符添加到另一个字符串 destination 的后面。
2、返回值:destination里面字符串的首字符地址
3、注意:
1.该函数与 strcat 极为相似,只是增加了追加的数量
2.该函数在追加完字符后,会在结尾自动补上 ‘\0’ ,所以可以自己给自己追加字符串
4、演示代码
#include<stdio.h> #include<string.h> int main() { char str[20] = "abcdef"; strncat(str, str,6); printf("%s",str); //打印结果 abcdefabcdef return 0; }
7、strncmp函数
函数原型 int strncmp ( const char * str1, const char * str2, size_t num );
1、功能:比较两个字符串前num个字符,按字符ASCII码值从第一个开始比较,如果str1小于str2,该函数返回一个小于零的值。如果str大于str2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。
2、返回值:整数
3、注意:该函数与 strcmp 极为相似,只是增加了追加的数量
4、演示代码
#include<stdio.h> #include<string.h> int main() { char* str = "abcdef"; char* ch = "abcdf"; int ret = strncmp(str, ch,3); printf("%d", ret); //打印结果 0 return 0; }
8、strstr函数
函数原型 char * strstr (char * str1, const char * str2 );
1、功能:在 str1 中查找整个 str2 字符串第1次出现的起始位置,并返回一个指向该位置的指针。如果str2并没有完整地出现在str1字符串中,函数将返回一个NULL指针,如果第2个参数是一个空字符串,函数就返回str1。
2、返回值:char*的指针
3、演示代码
#include<stdio.h> #include<string.h> int main() { char* p1 = "abcdef"; char* p2 = "cde"; printf("%s", strstr(p1, p2)); //打印结果为 cdef return 0; }
9、strtok函数
函数原型 char * strtok ( char * str, const char * delimiters );
1、功能:将字符串 str 分解为一组字符串,分隔符为delimiters。
2、返回值:char*的指针
3、注意:
1. delimiters参数是个字符串,定义了用作分隔符的字符集合
2. 第一个参数指定一个字符串,它包含了0个或者多个由 delimiters 字符串中一个或者多个分隔符分割的标记。
3. strtok函数找到str中的一个标记,并将其用 ‘\0’ 结尾,返回一个指向这个标记的首元素指针。
4. strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。
5. strtok函数的第一个参数不为NULL ,函数将找到str中第一个标记,strtok函数将记录它在字符串中的位置
6. strtok函数的第一个参数为NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
7.如果字符串中不存在更多的标记,则返回NULL 指针。
4、演示代码
(此函数有些复杂,让我们先看结果再看代码,实际使用中不必记住上面的每一条注意,按下面代码的使用方式,使用此函数即可以,不必过于担心)
#include<stdio.h> #include<string.h> int main() { //要切割的字符串 char str[30] = "3107131629@qq.com"; //切割符号 本例中是 @ 与 . char* p2 = "@ ."; printf("%s\n", strtok(str, p2)); //注意第二次切割时,第一个参数(要切割的字符串)变为NULL //因为上面的 注意5. 注意6. 说明此函数有记忆效应! printf("%s\n", strtok(NULL, p2)); //类似第二次,第一个参数变为NULL printf("%s\n", strtok(NULL, p2)); return 0; }
以后我们使用 strtok 函数可以类似上面的代码中对此函数的使用方式
10、strerror函数
在介绍此函数之前先介绍一下 错误码
,例如常见的 404错误 就是一个错误码,错误码记录了出现错误的原因。
C语言中有一个隐藏的全局变量 errno,使用此全局变量必须先要引用头文件 ‘’#include <errno.h>‘’,该全局变量记录了程序使用中的出现错误的错误码,但是错误码我们看不懂,需要经过函数翻译才能看懂。
函数原型 char * strerror ( int errno );
1、功能:返回错误码,所对应的错误信息。
2、返回值:char*的指针,该指针指向了一句英文字符串,该英文就是错误原因
3、注意:要引用头文件 ‘’#include <errno.h>‘’
4、演示代码
如果你为初学者看不懂此代码,那无所谓,体会此函数的作用即可
#include<stdio.h> #include<string.h> #include<errno.h> int main() { //读文件 FILE* pf = fopen("test.txt", "r"); //我当前目录没有 test.txt文件,故此代码错误,pf=NULL if (pf == NULL) { printf("%s\n", strerror(errno)); return -1; } //关闭文件 fclose(pf); pf = NULL; return 0; }
此条英文就是错误原因
好了,关于字符函数和字符串函数的一些知识点就分享到这儿了,如果本篇文章有错误的地方或者不清楚的地方,可以在评论区随时留言或者私信给我哦!byebye