strcpy与memcpy的区别

原文:

http://blog.chinaunix.net/uid-23922099-id-3555928.html

#include<iostream>
using namespace std;
char * strcpy(char * strDest, const char * strSrc) // 实现strSrc到strDest的复制
{
	if ((strDest == NULL) || (strSrc == NULL)) //判断参数strDest和strSrc的有效性
	{
		return NULL;
	}
	char *strDestCopy = strDest;        //保存目标字符串的首地址
	while ((*strDest++ = *strSrc++)!='\0'); //把strSrc字符串的内容复制到strDest下
	return strDestCopy;
}

int getStrLen(const char *strSrc)         //实现获取strSrc字符串的长度
{
	int len = 0; //保存长度
	while(*strSrc++ != '\0')             //循环直到遇见结束符'\0'为止
	{
		len++; 
	}
	return len;
};
int main()
{
	char strSrc[] = "Hello World!";       //要被复制的源字符串
	char strDest[20];                  //要复制到的目的字符数组
	int len = 0;                       //保存目的字符数组中字符串的长度
	len = getStrLen(strcpy(strDest, strSrc)); //链式表达式,先复制后计算长度
	printf("strDest: %s\n", strDest);
	printf("Length of strDest: %d\n", len);
	return 0;
}




#include<iostream>
#include<assert.h>
using namespace std;
void *memcpy1(void *memTo, const void *memFrom, size_t size)
{
	assert((memTo != NULL) && (memFrom != NULL)); //memTo和memFrom必须有效
	char *tempFrom = (char *)memFrom;             //保存memFrom首地址
	char *tempTo = (char *)memTo;                  //保存memTo首地址
	while(size -- > 0)                //循环size次,复制memFrom的值到memTo中
		*tempTo++ = *tempFrom++ ; 
	return memTo;
}
void print(char c)//打印字符的每一位
{
	char temp=0x01;
	for(int i=7;i>=0;i--)
	{
		if(  (c&(temp<<i)) !=0)//优先级从左到右减小:1、!=2、<<、>>3、&
			cout<<1;
		else
			cout<<0;
	}
	cout<<endl;
}
int main()
{
	unsigned char strSrc[] = "Hello World!";    //将被复制的字符数组
	unsigned char strDest[20];               //目的字符数组
	memcpy1(strDest, strSrc,4);    //复制strSrc的前4个字符到strDest中
	strDest[4] = '\0';                //把strDest的第5个元素赋为结束符'\0'
	printf("strDest: %s\n", strDest);
	return 0;
}

strcpy和memcpy主要有以下3方面的区别。
复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
复制的方法不同。strcpy不需要指定长度,它遇到字符串结束符"\0"便结束。memcpy则是根据其第3个参数决定复制的长度。
用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值