来源于:http://www.interviewsansar.com/2016/01/05/difference-between-strcpy-and-memcpy-in-c-cpp/
memcpy()函数:memcpy函数将指定的字节数从源缓冲区复制到目标缓冲区。实际上,程序员提供要复制的数据的大小。
memcpy()不会检查源缓冲区中的任何终止空字符。其实,它并不关心内存中有什么内容。只要它复制指定的字节数。
strcpy()函数:这个函数将来自源的字符串复制到目标缓冲区,直到它遇到空终止字符,即源字符串中的'\ 0'。
strcpy()的原型:char * strcpy(char * destination,const char * source);
C编程中的strcpy()和memcpy() API的示例。
下面的程序有一个源缓冲区,其中包含一个包含'\ 0'的字符串 - 终止空字符。即:
char source[16]=”interview\0sansar”;
我们在这个字符串中放置了一个空字符来表明strcpy()函数将复制字符串直到找到'\ 0',即拷贝字符串“interview”到目标缓冲区。
而memcpy()会复制整个字节,所以,完整的字符串包括'\ 0'空字符结果输出为“interview \ 0sansar”。
注意:我们已经写了显示函数(它遍历缓冲区的所有内存插槽,读取字符并打印到控制台),以查看strcpy()和memcpy()输出的区别。printf()函数只要找到null字符,它就会停止打印。
下面是我们的代码测试:
//display(): print supplied string on console fetching characters.
void display(char* s){
int i = 0;
char *temp = s;
for (i; i < 16; ++i)
{
printf("%c", *temp ? *temp : ' ');
++temp;
}
printf("\n");
}
int main()
{
char source[16]="interview\0sansar";
char str_cpy_destination[16];
char mem_cpy_destination[16];
//intialize buffer to 0, if not buffer will have garbage values.
memset(str_cpy_destination, 0, 16);
memset(mem_cpy_destination, 0, 16);
//Display the source string.
display(source);
strcpy (str_cpy_destination,source);
display(str_cpy_destination);
memcpy ( mem_cpy_destination, source, 16);
display(mem_cpy_destination);
return 0;
}
测试输出结果:
interview sansar interview interview sansar
通过上面代码,我们便可以看出strcpy()和memcpy()的区别了。
性能对比:
如果我们必须复制相同数量的字节并且知道要复制的数据的大小,memcpy()函数将会更快。在strcpy的情况下,strcpy()函数逐个复制字符,直到找到NULL或'\ 0'字符。
请注意,如果字符串长度非常小,性能不会有太大区别。 但是,如果我们有大的字符串,可能是从已知大小的文件中读取字符串,在这个时候,我们可以考虑性能。 而如果繁重的字符串处理是在一个循环内,那么我们必须考虑选择strcpy()或memcpy()函数。
文章的脚注信息由WordPress的wp-posturl插件自动生成
微信扫一扫,打赏作者吧~![[整理][转载]win下网卡抓包发包库Npcap使用](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2023/08/demo_1-1024x711.jpg&w=280&h=210&zc=1)
![[转载]基础数据char,int,double,string是线程安全的吗?](http://www.jyguagua.com/wp-content/themes/begin/img/random/19.jpg)
![[整理]用c++编写的RDTSC性能计时器](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2020/12/rdtsc-assembly-example.jpg&w=280&h=210&zc=1)
![[整理]strcmp汇编写法](http://www.jyguagua.com/wp-content/themes/begin/img/random/9.jpg)