一.C语言对字符和字符串的处理
C语言中对字符和字符串的处理很是频繁,但是C语言本身并没有字符串类型,字符串通常放在常量字符串或者字符数组中。
PS:字符串常量适用于那些对它不做修改的字符串函数
常量字符串:
"hello my friend! \0"//默认后面会有\0
字符数组:
char arr[]="welcome to my blog! \0";//默认后面会有\0
1.字符串函数的头文件
#include<string.h>
二.strlen(字符长度函数)
特性:
- strlen的返回类型是unsigned int
- 无符号数-无符号数还是无符号数
使用场景:
1.模拟实现strlen
原理:指针-指针
注意点:const修饰的指针到另一个指针时,也应该受保护(+const)
三.strcpy(字符拷贝函数)
注意:返回类型为char*,打印时可以接受其返回值
使用场景:
1.strcpy的2种特性
一.strcpy会拷贝"\0"
如果不拷贝\0会报错(越界)
二.能越界访问,但报错
(虽然能成功拷贝,但仍然会报错)(要保证目标空间足够大·)
2.场景:拷贝放到常量字符串
前提条件:(目标指针指向的空间必须可修改)
3.模拟实现strcpy
原理:逐个改变目的地的地址,即指针(地址)覆盖
四.stract(字符追加函数)
PS:与strcpy类似,参数部分都是前目的地,后源。
使用场景:
特性:
- 追加字符串时,源字符串必须有\0
- 会覆盖待追加代码的\0(从第一个\0处开始追加)
1.模拟实现strcat
比模拟实现strcpy多了一步:设置cur指针,重新找拼接的头指针(覆盖掉源代码的\0)
2.(特性实例)情景1:能否实现自己追加自己?NO
分析:
- stract的特性之一就是会覆盖待追加代码的"\0"
五.strcmp(字符比较函数)
注意点:
- 比较对应位置上字符的Ascall值的大小
- 一定要有‘\0’,即终止符号
- 与字符串的长短无关 !!!!!!!!!!!!
使用场景:
1.模拟实现strcmp
原理:逐字符比较
六.strcpy,strcmp,strcat与strncpy,strncmp,strncat比较
直观区别:
长度受限制的字符串函数
长度不受限制的字符串函数
PS:strncpy,strncat不仅是长度受限与否的区别,还有特性上的区别
七.strncpy
应用场景:
一:情景:strncpy遇到过分拷贝时的运作
strncpy特性:不够拷贝的部分,补上" \0"