简介:顾名思义,字符串函数是对字符串进行一系列操作处理函数。这里是对一些常用字符串函数的汇总,以及对这些函数的模拟实现。
一些需要知道的知识:
1.数组名是数组首元素的地址,在用数组定义字符串的时候,数组名表示的是字符串的首元素的地址。因此在对一个用数组储存的字符串用函数进行处理的时候,可以通过指针变量传递首元素的地址。但是如果传递数组到函数的时候用形参数组接受也是可以的!
2.assert(断言)可以在函数内部判断传递进来的指针是否是空指针,提升安全性,使用的时候需要包含<assert.h>头文件。
3.const char * arr——数组指针arr指向的值不能通过arr修改
char * const arr——arr指针不能被修改,但是arr指向的值可以被修改
4.字符串的打印默认是找到'\0'就停止('\0'又被称为终止空字符)
......后续有新的函数要用到的基础知识也会在这里补充
strlen函数:
以下是中文文本:
可以知道strlen函数统计的是一个字符串在遇到'\0'之前字符的个数(注意:如果字符串中间有'\0'存在,那么会提前终止)以下是两个例子:
(字符串末尾会自动放一个'\0')
模拟实现:(这里提供两个方法,读者可以自行发挥)
1.
2.
strcpy函数:
以下是中文文本:
以下是溢出的例子,在VS2019环境下会曝出警告:
警告:
但是需要注意的是,如果没有溢出情况。需要注意将一个较短的字符串拷贝给一个较长的字符串的情况(由于终止字符('\0')也被拷贝过去了,而字符串的打印默认遇到'\0'终止):
注意这里的arr2只有前四个字符被改变了,后面的没有被改变
模拟实现:
strcat函数:
以下是中文文本:
这边需要注意的是目标数组应该足够大来容纳串联字符(防止溢出,这边就不再赘述了),stract是找到了目标数组的'\0'就开始连接(并一定是在字符串末尾进行连接),同时,目标字符串和源字符串不能相同。
目标和源相同的情况:
模拟实现:
......笔者后续若使用到新的函数便会归纳在这边文章中
笔者纯小白,尝试对一些基础的知识点进行总结。如果有错误,欢迎指正~~
蟹蟹!