目录
零.前言
在c语言的学习过程中,不免会遇到对字符串的操作与处理,而c语言本身并没有字符串变量,只能用数组存储,这样操作起来就比较繁琐。所以学习使用字符串函数就显得比较重要,这些函数可以减少字符串的繁琐程度。
本章用到的头文件:
<stdio.h>
<string.h>(包含了字符串函数和内存函数)
<assert.h> (包含了assert函数)
一.字符串函数
①strlen
总所周知,字符串以'\0’作为结束标志,strlen函数的作用返回的是在字符串中 '\0' 前面出现的字符个数,也就是求得字符串的长度。
ps:strlen原型
用法:括号中是字符数组的首地址,返回值是一个无符号整型。也就是给函数传入数组首地址,返回字符串的长度。
使用方法与使用效果如下:
为了更好的理解使用函数,接下来进行我对函数的模拟实现。已知字符串是以‘\0’为结束标志,那么我们就可以利用这个特性进行模拟实现。
②strcpy
我们先来看函数的原型。
这个函数的作用是用来进行字符串的拷贝。函数的第一个参数destination 是拷贝的目标数组的首地址,第二个参数source是拷贝的源头数组的首地址,返回值也是目标数组的首地址。 也就是将source数组中的字符拷贝到destination中,并返回destination的首地址。
使用方法与使用效果如下:
接下来进行模拟实现:
③ strcat
先看函数原型。
这个函数的作用是用来 进行字符串的连接。是将source中的字符串连接到destination的后面,并返回destination的首地址。
使用方法与使用效果如下:
接下来进行模拟实现:
④strcmp
先看函数原型。
这个函数的作用是进行字符串的比较。str1和str2分别是两个字符数组的首地址。
工作原理
使用方法与使用效果如下:
接下来进行函数模拟:
⑤strstr
先看函数原型。
这个函数的作用是用来寻找子字符串。也就是在str1中寻找str2的子串,如果找到,就返回第一次找到子串的地址,如果找不到就返回空指针。
使用方法与使用效果如下:
接下来是模拟实现。
(PS因为我还没有学习kmp算法,所以这个函数我就用了BF算法实现,以后会加以改进)
二.内存函数
学习了上面的函数,会发现这些函数的弊端,也就是都要寻找'\0',因此这些函数不能应用于其他的数组,所以就得引入下面的内存函数。
①memcpy
先看函数原型。
这个函数与strcpy的作用差不多,它的作用是对内存进行拷贝。也就是将source中的num个字节拷贝到destination中,最后返回destination的首地址。这里为什么是用void*呢?因为用void*这个函数就可以适用于任何的数据拷贝,只需要强制类型转化就可以了。
使用方法与使用效果如下:
接下来进行模拟实现:
②memmove
引入这个函数前我们先用我们写的my_memcpy进行一个操作。
执行了之后我们并没有得到我们需要的数组这是为什么呢?
正是基于这样的原理,我们改进一下我们的my_memcpy函数。
为了方便呢,c语言也有一个实现这样功能的函数也就是memmove
先看函数原型
函数的作用也就是实现同一个数组或者不同数组之间的内存拷贝。也就是将source中的内容移动(拷贝)到destination中。
使用方法与memcpy一模一样,只是多了一个在同一数组中拷贝的功能。
使用方法与使用效果如下:
三.结语
这些库函数的介绍今天就告一段落了,在进一步的学习后会对字符串和内存函数进行补充介绍,感谢大家的浏览。