在c语言的学习中,我们对函数应该非常的熟悉,库函数对我们的代码的编写起到了巨大的作用,今天我们来看看学习过程中重要的库函数吧。
引用的头文件有:<stdio.h> <string.h> <assert.h> <errno.h>
一、strlen求字符串的长度
基本语法:
所以我们知道了,strlen是以\0结尾,但是计算字符串的长度时,不包含\0。
模拟实现strlen求字符串的长度:
我们可以用多种方法:
1、计数器(最简单,最基本)
const确保char*指向的内容不能改变。assert是断言,确保str里面包含的内容不为NULL。在整个代码中确保代码的规范。
2、函数递归
3、指针 - 指针
注意点:
strlen函数的返回值为无符号类型
abc的长度为3,abcdef的长度为6。按道理来说,3-6=-3,就是应为strlen返回的是无符号类型,说以此时返回的是3。
二、strcpy拷贝
基础语法:
以\0为终止元素。
模拟实现strcpy拷贝
注意:
(1)源字符串必须以“\0”结尾
(2)会将源字符串中的“\0”拷贝到目标空间
(3)目标空间必须足够大,以确保能存放源字符串
(4)目标空间必须可以变
三、strcat字符串的追加
基本语法:
不能自己给自己追加,应为\0被覆盖,找不到结束标志。
模拟实现strcat实现字符串的追加:
注意:
(1)源字符串必须以“\0”结尾
(2)目标空间必须足够大,以确保能存放源字符串
(4)目标空间必须可以变
四、strcmp字符串比较
我们来看一段代码:
这样写可以吗?答案:不行。因为字符串不能直接比较。
那么我们怎么比较呢?这就要用到strcmp函数。
大家不要掉进了误区,以为q的长度更长,所以q比p大。这里的大小比较其实是大的字符所在的字符串更大。
模拟实现strcmp字符串比较:
注意:
(1)第一个字符串大于第二个字符串,则返回大于0的数字
(2)第一个字符串等于第二个字符串,则返回0
(3)第一个字符串小于第二个字符串,则返回小于0的数字
strcpy,strcat,strcmp是长度不受限制的字符串函数
strncpy,strncat,strncmp是长度受限制的字符串函数,怎么用呢?和上述函数用法一致,只不过加了长度大小。具体用法如下:
五、strstr实现在一个字符串中找另外一个字符串
基本语法:
模拟实现strstr 在一个字符串中找另外一个字符串:
首先创造两个空指针s1,s2,令cp指向str1的首元素所对应的地址,此时我们有三个指针,分别为str1,str2,cp,其中cp和str1指向同一个位置。如下图:
cp的作用就是记录所走过的元素。
六、strtok实现切割字符串
模拟实现strtok切割字符串,我们看代码来分析该函数的用法
分析:
char* strtok(char*str,const char * sep);
(1)首先sep的参数是个字符串,定义了用作分隔符的字符集合
(2)第一个参数指定了一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
(3)strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针(注:strtok会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改)
(4)strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置
(5)strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记
(6)如果字符串中不存在更多的标记,则返回NULL指针
所以我们最终的代码可以写成:
七、strerror 把错误码翻译成错误信息
不同的数字代表不同的错误信息。
具体用法:
当我们没这个文件的时候,编译器会报错。