【翻译】memcpy和strcpy的区别以及性能表现

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 【翻译】memcpy和strcpy的区别以及性能表现

来源于: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()函数。

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 【翻译】memcpy和strcpy的区别以及性能表现

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: