本文紧接上文c语言字符串函数(一)
4.strcmp()函数
1.作用:比较两个字符串内容的大小(规则:两个字符串分别从首字符开始比较字符的ASCII码,一旦出现字符串str1的某字符大于或者小于另一个字符串str2的字符,那结果就是str1大于或者小于str2;如果两串字符串的字符个数相同,并且两串字符串的每个字符均相等,那么就说这两串字符串相等
2.特点:当strcmp()函数返回一个大于0的数,str1>str2;
当strcmp()函数返回一个小于0的数,str1<str2;
当strcmp()函数返回一个等于0的数,str1=str2;
3.模拟实现:
以上所学到的strcpy()、strcat()、strcmp()函数均是长度不受限制的字符串。当source字符个数大于destination字符个数时,编译器会出现越界访问的警告,那这三个字符串函数在使用过程中会出现安全隐患。
接下来,我将介绍长度受限制的字符串函数。
5.strncpy()函数
功能如同strcpy()函数,只不过加了source要拷贝到destination字符的个数。
模拟实现如下:
6.strncat()函数
功能如同strcat()函数,只不过加了source要追加到destination字符的个数。
模拟实现:
7.strncmp()函数
功能如同strcmp()函数,只不过加了source要与destination比较的字符的个数。
模拟实现:
8.strstr()函数
1.功能:查找子串首字符的地址
2.模拟实现:
a.思路:简单的子串查找
复杂的子串查找
b.代码:
9.strtok()函数
1.功能:切割字符串
2.解析:函数声明中第一个参数是被切割的字符串首字符地址,第二个字符是由分隔符组成的字符串首字符的地址。
比如:输入email:zhangsan@126.com
分隔符字符串为"@."
被切割的字符串为"zhangsan@126.com"
3.使用说明:
a.strtok()函数在找到第一个属于分隔符字符串的分隔符时,会做标记且用'\0'覆盖分隔符,所以在使用该函数时经常将被切割字符串临时拷贝,在拷贝上进行分割
b.第一次调用strtok()函数时,第一个参数不为空,为被切割的字符串的临时拷贝。因为第一次会对该临时拷贝进行标记,相当于计算机记住了这串字符串。在以后的调用过程中,第一个参数变为空,意思是你不明确地向计算机表明被切割的字符串是哪个,但是计算机经过第一次的标记会自此记住被切割的字符串是哪个。
这是一个很有意思的函数,大家感兴趣的话可以深度了。有什么新发现,欢迎和我一起讨论。
10.strerror()函数
1.功能:可以根据错误码来分析函数在哪出现了错误
2.解析:本函数的参数是整型。返回值要用char*来接受。之所以要用char*来接受,是因为函数错误的反馈是以一串英文字符来显示的。
3.使用说明:
补充一个小的知识点:在c语言中设有全局变量errno,若不知道错误码是什么,可以在参数中直接填入errno,并且引用头文件<errno.h>。errno是记录系统的最后一次错误代码。
有关fopen()函数会在以后详细介绍。
11.字符分类函数
12.字符转换函数
字符转换函数中的参数为整型,是因为字符char型属于整型家族。见文数据在内存中的存储一。
13.memcpy()函数
1.功能:可以进行任何类型的拷贝
2.条件与上文strcpy()函数相同,在此不做额外的赘述。
3.头文件:<string.h>
4.使用规范:a.三个参数缺一不可
b.第三个参数是字节,表示要从source向destination拷贝几个字节
5.模拟实现:
在图片中显示的void* 表示泛型,即任何类型都可以实现的
特别地,该函数在使用过程不能自己拷贝自己。
14.memmove()函数
1.功能:可以进行任何类型的拷贝,并且可以避免覆盖。
2.条件与上文strcpy()函数相同,在此不做额外的赘述。
3.头文件:<string.h>
4.使用规范:a.三个参数缺一不可
b.第三个参数是字节,表示要从source向destination拷贝几个字节
c.参数间的关系,源串向目标空间中拷贝几个字节
5.模拟实现:
在图片中显示的void* 表示泛型,即任何类型都可以实现的
若dest在src之后,要从后往前拷贝;
反之,dest在src之前,要从前往后拷贝。
'\x'转义字符,表示十六进制
上面是我自己编写的模拟实现的代码十分复杂。现在我将给出更简单的方法。
对了,第一种模拟实现的代码是有问题的。当dest在src后是从后往前拷贝的,即src的最后一字节内容拷贝到dest最后一字节,而不是拷贝在dest第一字节处。
15.memcmp()函数
1.功能:比较大小
2.特点:返回值大于零,证明ptr1代表的内容在num个字节中是要大于ptr2代表的内容。
返回值小于零,证明ptr1代表的内容在num个字节中是要小于ptr2代表的内容。
返回值等于零,证明ptr1代表的内容在num个字节中是要等于ptr2代表的内容。
16.memset()函数
1.功能:选中的若干个字节的空间内可以被初始化位某个整型
如果有什么问题,请在评论说明。我会非常感激的!
谢谢大家的观看,完结撒花!