介绍strncpy
strncpy的原型:char *strncpy( char *strDest, const char *strSource, size_t count );
既然要模拟,那就要先搞清楚原型是什么意思,Dest是目的地,Source是源头,count是要复制过去数目的多少。
创建数组
模拟(创建一个函数)
在原型中,函数的第一个参数是目的地,arr1就是我的目的地,arr2是我的源头,3是我的数目。
切记,复制的源头一定不能超过目的地。
一旦超过,在模拟实现的函数中,目的地最多有多少个空间,就只能复制多少个。
而在strncpy中,如果超过,结果也是一样的
函数内部
因为arr1是会变动的,而arr2是源头则不会变动。
那思路就很清楚了,我们可以先让*s1(arr1)赋值到一个指针。
然后arr1 *(s1)每次加一等于arr2 * (s2)每次加一。
多少次呢?
就是我们的 K,所以我们要用到while循环。
这就完成了strncpy的模拟实现。
注意
还记得我们为什么要把s1赋值到一个指针里吗?
因为*s1是一直在跑的,
*s1的位置一直在往后走
前面的地址没记录就丢失了
如果返回的*s1当前的地址,也就是从第四个字符开始到结尾
打印的值就会像这样,只有8个x,前面3个丢失了