memcpy:
从一个字符串复制一个字节到另外一个字符串(The memcpy() function copies n bytes from memory area src to memor area dest. ),并且两个字符串不能有重叠区域。
头文件包含:#include <string.h>
memcpy()函数原型:
void *memcpy(void *dest, const void *src, size_t n);
dest指向的字符串表示目标字符串,src指向的字符串表示原字符串,n表示要复制的字节数。
返回值:复制成功返回目标字符串(dest指向的字符串)的指针。
自己编写程序实现memcpy函数:
第一种方式利用assert宏:
#include <stdio.h>
#include <assert.h>
void *memcpy2(void *memTo, const void *memFrom, size_t size)
{
//ASSERT()一般被称为断言,它是一个调试程序常用的宏。
//它定义在<assert.h>头文件中,通常用于判断程序中是否出现了非法的数据,
//在程序运行时它计算括号内的表达式的值,如果表达式的值是false(0),程序报告错误,终止运行。
assert((memTo != NULL) && (memFrom != NULL)); //memTo和memFrom必须有效
char *tempFrom = (char *)memFrom; //保存memFrom首地址
char *tempTo = (char *)memTo;
while(size -- > 0) //循环size次,复制memFrom的值到memTo中
*tempTo++ = *tempFrom++ ;
return memTo;
}
int main()
{
char strSrc[] = "rrrr"; //将被复制的字符数组
char strDest[20]; //目的字符数组
memcpy2(strDest, strSrc, 4); //复制strSrc的前4个字符到strDest中
strDest[4] = '\0'; //把strDest的第5个元素赋为结束符'\0'
printf("strDest: %s\n", strDest);
return 0;
}
第二种方式不用assert宏:
#include <stdio.h>
void *memcpy2(void *memTo, const void *memFrom, size_t size)
{
if((memTo != NULL) && (memFrom != NULL))
{
char *tempFrom = (char *)memFrom; //保存memFrom首地址
char *tempTo = (char *)memTo;
while(size!=0) //循环size次&#x