c语言字符串函数(二)

本文紧接上文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.功能:选中的若干个字节的空间内可以被初始化位某个整型

 如果有什么问题,请在评论说明。我会非常感激的!

谢谢大家的观看,完结撒花!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值