本章重点:
重点介绍处理字符和字符串的库函数的使用和注意事项
注意:在使用字符串处理函数时,一定要使用 #include引用头文件,才能使用以下函数
目录
1、求字符串长度
strlen
2、长度不受限制的字符串函数
strcpy
strcat
strcmp
3、长度受限制的字符串函数介绍
strncpy
strncat
strncmp
4、字符串查找
strstr
strtok
5.错误信息报告
strerror
函数原型 size_t strlen ( const char * str );
1、功能: 返回字符串str的长度
2、注意:
1.字符串的结束标志是’\0’ ,参数指向的字符串必须要以’\0’ 结束。
2.strlen函数返回的是在字符串中’\0’ 前面出现的字符个数(不包含’\0’ )。
3.注意函数的返回值为size_t,是无符号的,即不会有负数!
3、演示代码:
#include
#include
int main()
{
char *ch = "abcdef";
//指针ch接收的是字符串的首地址,即'a'的地址
int len=strlen(ch);
printf("%d", len);
//最后打印的结果是 6
return 0;
}
函数原型 char * strcpy ( char * destination, const char * source );
1、功能:将字符串 source 里面的内容拷贝到 destination 里
2、返回值:destination里面字符串的首字符地址
3、注意:
1.目标参数destination的以前内容将被覆盖并丢失。
2.源字符串必须以’\0’ 结束。会将源字符串中的’\0’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4、演示代码
#include
#include
int main()
{
char *ch = "abcdef";
char str[20];
strcpy(str, ch);
//指针str接收的是字符串的首地址,即'a'的地址
printf("%s", str);
//打印的结果为 abcdef
return 0;
}
函数原型 char * strcat ( char * destination, const char * source );
1、功能:将一个字符串 source 添加到另一个字符串 destination 的后面。
2、返回值:destination里面字符串的首字符地址
3、注意:
1.源字符串必须以’\0’ 结束。目标空间必须有足够的大,能容纳下源字符串的内容。
2.该函数不能自己给自己追加字符串,会造成死循环。
4、演示代码
#include
#include
int main()
{
char str[20]="abcdef";
char* ch = "ghijklmn";
strcat(str, ch);
//指针str接收的是字符串的首地址,即'a'的地址
printf("%s", str);
//打印结果是 abcdefghijklmn
return 0;
}
函数原型 int strcmp ( const char * str1, const char * str2 );
1、功能:比较两个字符串,按字符ASCII码值从第一个开始比较,如果str1小于str2,该函数返回一个小于零的值。如果str大于str2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。
2、返回值:整数
3、注意:字符串不能用等号来比较大小,只能用strcmp函数来比!
4、演示代码
#include
#include
int main()
{
char *str="abcdef";
char* ch = "abcdf";
int ret =strcmp(str, ch);
//'e'<'f'
printf("%d", ret);
//打印结果 -1
return 0;
}
函数原型 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
#include
int main()
{
char str[20] = "abcdef";
char* ch = "klmn";
strncpy(str, ch,3);
printf("%s",str);
//打印结果 klmdef
return 0;
}
函数原型 char * strncat ( char * destination, const char * source, size_t num );
1、功能:将一个字符串 source 前 num 个字符添加到另一个字符串 destination 的后面。
2、返回值:destination里面字符串的首字符地址
3、注意:
1.该函数与 strcat 极为相似,只是增加了追加的数量
2.该函数在追加完字符后,会在结尾自动补上 ‘\0’ ,所以可以自己给自己追加字符串
4、演示代码
#include
#include
int main()
{
char str[20] = "abcdef";
strncat(str, str,6);
printf("%s",str);
//打印结果 abcdefabcdef
return 0;
}
函数原型 int strncmp ( const char * str1, const char * str2, size_t num );
1、功能:比较两个字符串前num个字符,按字符ASCII码值从第一个开始比较,如果str1小于str2,该函数返回一个小于零的值。如果str大于str2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。
2、返回值:整数
3、注意:该函数与 strcmp 极为相似,只是增加了追加的数量
4、演示代码
#include
#include
int main()
{
char* str = "abcdef";
char* ch = "abcdf";
int ret = strncmp(str, ch,3);
printf("%d", ret);
//打印结果 0
return 0;
}
函数原型 char * strstr (char * str1, const char * str2 );
1、功能:在 str1 中查找整个 str2 字符串第1次出现的起始位置,并返回一个指向该位置的指针。如果str2并没有完整地出现在str1字符串中,函数将返回一个NULL指针,如果第2个参数是一个空字符串,函数就返回str1。
2、返回值:char*的指针
3、演示代码
#include
#include
int main()
{
char* p1 = "abcdef";
char* p2 = "cde";
printf("%s", strstr(p1, p2));
//打印结果为 cdef
return 0;
}
函数原型 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
#include
int main()
{
//要切割的字符串
char str[30] = "[email protected]";
//切割符号 本例中是 @ 与 .
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 函数可以类似上面的代码中对此函数的使用方式
在介绍此函数之前先介绍一下 错误码
,例如常见的 404错误 就是一个错误码,错误码记录了出现错误的原因。
C语言中有一个隐藏的全局变量 errno,使用此全局变量必须先要引用头文件 ‘’#include
函数原型 char * strerror ( int errno );
1、功能:返回错误码,所对应的错误信息。
2、返回值:char*的指针,该指针指向了一句英文字符串,该英文就是错误原因
3、注意:要引用头文件 ‘’#include
4、演示代码
如果你为初学者看不懂此代码,那无所谓,体会此函数的作用即可
#include
#include
#include
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