1.memcpy函数的使用
memcpy
函数是 C 标准库中的一个内存复制函数,定义在 <string.h>
头文件中。它用于将指定大小的内存块从一个地址复制到另一个地址。
void * memcpy ( void * destination, const void * source, size_t num );
destination
:目标内存地址,即要复制到的位置。source
:源内存地址,即要从中复制的位置。num
:要复制的字节数。- 返回指向目标内存地址
destination
的指针。
注意:
这个函数在遇到 '\0' 的时候并不会停下来。
如果source和destination有任何的重叠,复制的结果都是未定义的。
实例:
#include <stdio.h>
#include <string.h>
struct {
char name[40];
int age;
} person, person_copy;
int main ()
{
char myname[] = "Pierre de Fermat";
memcpy ( person.name, myname, strlen(myname)+1 );
person.age = 46;
memcpy ( &person_copy, &person, sizeof(person) );
printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );
return 0;
}
运行结果:
2.memcpy函数的模拟实现
#include <stdio.h>
#include <string.h>
void* my_memcpy(void* dst, const void* src, size_t count)
{void* ret = dst;assert(dst);assert(src);/** copy from lower addresses to higher addresses*/while (count--) {*(char*)dst = *(char*)src;dst = (char*)dst + 1;src = (char*)src + 1;}return(ret);
}
struct {char name[40];int age;
} person, person_copy;
int main()
{char myname[] = "Pierre de Fermat";/* using memcpy to copy string: */my_memcpy(person.name, myname, strlen(myname) + 1);person.age = 46;/* using memcpy to copy structure: */my_memcpy(&person_copy, &person, sizeof(person));printf("person_copy: %s, %d \n", person_copy.name, person_copy.age);return 0;
}