C进阶-字符串与内存函数介绍(另加2道典型面试题)
满意的话,记得一键三连哦!
我们先看2道面试题
第一道:
我们画图理解:
pa++,先使用再++,pa开始指向a【0】,++之后pa向下移动一位,再解引用,指向a【1】,a【1】又指向at的首元素a的地址,开始打印字符串at
第二道:
我们画个图:(初始的指向图)
第一个printf:(配着图哦!)(注意上一个printf的图是下一个printf的初始图,因为cpp指向也发生了改变)
cpp加加,首先自己的指向向下移动一位,指向cp【1】,解引用得到cp【1】的位置,再解引用得到c【2】,打印POINT
第二个printf:
cpp先加加后使用,让cpp指向了cp【2】,解引用拿到cp【2】,cp【2】先自减再使用,解引用得到c【0】, c【0】+3 , c【0】从指向E(首元素)向后移动3位,指向了后面那个E,打印EP
注意上个printf的图是下一个printf的初始图,同时注意cpp【-2】这种,cpp在使用完后会复原
第三个printf:
cpp【-2】,相当于cpp-2,指向cp【0】,自解引用得到cp【0】,cp【0】再解引用,拿到c【3】,c【3】开始指向F(首元素),+3向后移动3位,指向了S,打印ST
第四个printf:
cpp[【-1】【-1】,先向下移动一位自解引用得到cp【1】,再让cp【1】向下移动一位自解引用拿到c【1】,c【1】开始指向N(首元素),再向后移动一位指向E,打印EW
C— 字符串与内存函数的介绍(注意头文件哦!)
我们先看几个常用的库函数(注意目标空间足够哦!这是常犯错的地方)
strlen计算长度
strlen是求字符串长度,直到遇到 \0 才会停下来,计算的是 \0 之前的字符个数,返回值是size_t(无符号整数)
(1)直接使用(注意:只有字符串才有 \0 ,strlen只会遇到 \0 才会停下)
(2)指针实现strlen
(3)递归实现strlen
strcpy拷贝字符串
就是给一个目标空间,把一个字符串拷贝到这个空间
(1)直接使用
注意:它有一个覆盖的效果
(2)实现strcpy
strcat追加字符串
找到目标的末尾\0,在\0之后追加字符串(因此追加之后,原来目标末尾的\0会被丢掉,因为要打印新的字符串,不然可能断节)
(1)直接实现
(2)实现strcat
strcmp比较字符串大小
比较2个字符串大小,从第一个开始,一个个比较(比较ASCII值),比较的结果返回一个“>0”,"<0","=0”的数字
(1)直接使用strcmp
(2)实现strcmp(简单的方法就是多写几个判断就行了)
strnlen与strncpy与strncat与strncmp
这几个就是上面的升级版,升级地方就在可以控制个数,我举个例子大家就明白了,举一反三的道理
同样,如果是strncat,就是控制追加字符个数
如果是strncmp,就是控制比较个数
用法一样,这个很好理解,都是在前两个参数后面加一个数字
我们来看看strncpy(拷贝字符串)如果数字超标了怎么办:
所以:如果是strncpy,那么数字过大,就只打印拷贝的全部内容
我们再看看strncmp:(比较大小)
结果会直接报错
下面看strncat(追加字符串):
结果是编译器不报错,直接输出追加完的结果
strstr查找字符或者字符串
跟名字一样,就是查找功能,然后从查找的符合条件的地方一起打印,直到\0停下
(1)直接使用:
今天就先到这里啊!明天我再补充完整,感谢支持!!!!