【c语言】memcpy函数的使用和模拟实现
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;
}