相信每一个接触C语言的同学对这三个函数都不陌生,但他们之间有什么区别和联系呢?下面我们来一起探讨。
三种函数的介绍
strcpy
官方定义:
第一个参数:目的地址,要把拷贝的内容放到哪里去
第二个参数:源头地址,要从哪里拷贝数据。(const表示该指针指向的内容不期望被修改)
该函数的返回类型是返回目的空间的起始地址(char*)。
需要包含头文件:<string.h>
strncpy
官方定义:
第一个参数、第二个参数和返回类型同strcpy。
第三个参数:size_t是无符号整型,count为要复制的字符个数
需要包含头文件:<string.h>
memcpy
对于该函数,我在《深入解析C语言内存函数》一文中有更加深入的介绍,感兴趣的同学可自行阅读,文章链接已奉上https://blog.csdn.net/2302_77644537/article/details/136060073?spm=1001.2014.3001.5501
三种函数的使用及注意事项
strcpy
#include <stdio.h>
#include <string.h>
//正确使用方法
int main()
{
char arr1[10] = { 0 };
char arr2[] = "hello!";
strcpy(arr1, arr2);
printf("%s",arr1);
return 0;
}
注意事项
1.源字符串必须以 '\0' 结束,如果源字符串不包含'\0',就会一直往后寻找,直到找到'\0'为止,也就是说发生了越界访问,结果是未定义的。请看代码:
2.会将源字符串中的 '\0' 拷贝到目标空间。也就是说strcpy不光会把源字符串中的字符拷贝到目标空间,也会把源字符串中的'\0'拷贝过去。请看代码:
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可修改
strncpy
#include <stdio.h>
#include <string.h>
//正确使用
int main()
{
char arr1[10] = "xx";
char arr2[] = "acbdefg";
strncpy(arr1, arr2,5);
printf("%s",arr1);
return 0;
}
注意事项
1.如果源字符串的长度小于count,则拷贝完源字符串之后,在目标的后边追加0,直到count个。也就是说使用者让strncpy拷贝几个字符strncpy就拷贝几个,不够补0。请看代码:
2.源字符串必须以 '\0' 结束。请参照strcpy
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可修改
memcpy
请阅读文章:
https://blog.csdn.net/2302_77644537/article/details/136060073?spm=1001.2014.3001.5501
三种函数的不同
1.strcpy和strncpy拷贝字符串,memcpy可拷贝任意类型
2.strcpy拷贝整个字符串的大小,strncpy和memcpy可以指定拷贝长度
3.strncpy以'\0'作为结束标志,memcpy不关心拷贝的内容('\0'也可以拷贝)。请看代码:
仔细对比上面两张图,希望大家能够理解它们之间的区别。
结语
至于三种函数的相同点,这里就不再多说,大家按需求选择使用函数。最后如果用不理解的地方,欢迎私信骚扰~~886~~