目录
1. strcpy详解
作用:完成字符串的复制。
头文件:<string.h>
destination是字符串要复制到的地点,source是字符串的来源,返回值是destination
演示:
1. 1trcpy函数的特殊情况
情况一:arr2的空间无法装完要拷贝的内容
在打印时遇到arr2外部的\0时打印结束,可见拷贝时arr2外部的内容也被更改。并且出现可警告如下:
显示arr2外部的堆栈已被破环。
情况二:
可见strcpy在复制时在复制的最后一个字符后面加了\0,
我们看到arr2中的值时也看到arr2后面的‘x’没有被更改。
1.2 strcpy模拟实现:
实现方法1:
#include <assert.h>
char* my_strcpy(char* dest, const char* sour)
{
assert(*dest != 'NULL');
assert(*sour != 'NULL');
char* p = dest;
while (*sour != '\0')
{
*dest = *sour;
dest++;
sour++;
}
*dest = *sour;
return p;
}
int main()
{
char arr1[] = "abedefg";
char arr2[10] = { 0 };
char* arr = my_strcpy(arr2, arr1);
printf("%s\n", arr);
printf("%s\n", arr2);
return 0;
}
这种方式是比较麻烦低级的一种写法,下面我们看一个简单的写法。
实现方法2:
#include <assert.h>
char* my_strcpy(char* dest, const char* sour)
{
assert(dest != 'NULL');
assert(sour != 'NULL');
char* p = dest;
while (*dest++ = *sour++)
{
;
}
return p;
}
++会在完成解引用并赋值后对dest和sour再进行+1,使指针指向了下一个地址,当sour解引用后是\0时,不仅完成了赋值,并且等式返回的就是sour解引用后的值0,whlie循环结束。
2. strncpy函数详解
头文件<string.h>
相比strcpy多了一个参数unm,表示要拷贝的字符个数,可以指定要拷贝的字符串个数。
演示:
2.1 strncpy函数特殊情况:
情况一:
可见strncpy函数没有在结尾拷贝\0,所以arr2后面的x也打印出来了
情况二:
若num参数大于arr1的长度,则会向strcpy函数一样,在拷贝的结尾加上\0,考完这个\0后就不会再拷贝其他内容。再如下面的示例;
arr1\0后面还有元素,但是不影响拷贝完\0后停止拷贝。
情况三:
和strcpy函数的情况一类似,同样arr2外部堆栈被破环。
2.2 strncpy函数模拟实现:
#include <assert.h>
char* my_strncpy(char* dest, const char* sour, int num)
{
assert(dest && sour);
char* p = dest;
while (num && *sour != '\0')
{
num--;
*dest = *sour;
dest++;
sour++;
}
if (num)
{
*dest = '\0';
}
return p;
}
这样实现和strncpy函数的效果一样,特殊情况也相同,
当然也可以用for循环来实现函数:都是可以的在这里就不展示了,有疑问可以在评论区提问》
感谢观看,谢谢支持