博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcpy函数
阅读量:3760 次
发布时间:2019-05-22

本文共 4206 字,大约阅读时间需要 14 分钟。

【FROM MSDN && 百科】

原型:  void *memcpy(void *dest, const void *src, size_t n);

#include<string.h>

功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

Copies the values of num bytes from the location pointed by source directly to the memory block pointed by destination.

The function does not check for any terminating null character in source - it always copies exactly num bytes.

 is an unsigned integral type.

返回值:.src和dest所指内存区域不能重叠,函数返回指向dest的。

strcpy和memcpy区别如下:

1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2.用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

3.复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

DEMO:

//#define FIRST_DEMO    
//#define SECOND_DEMO
//#define THIRD_DEMO
#define MYMEMCPY
//#define FORTH_DEMO
#ifdef FIRST_DEMO
#include
#include
#include
#include
int main(void)
{
char *s=
"Golden Global View";
char d[
20];
system(
"cls");
memcpy(d,s,(
strlen(s)+
1));
//将 s的字符串复制到数组d中
printf(
"%s\n",d);
getch();
return
0;
}
#elif defined SECOND_DEMO
#include
#include
#include
#include
int main(void) { char *s= "Golden Global View"; char d[ 20]; system( "cls"); /*从第14个字符(V)开始复制,连续复制4个字符(View)*/ memcpy(d,s+ 14* sizeof( char), 4* sizeof( char)); d[ 4]= '\0'; //这个语句若不加,输出的字符中有未初化的字符,显示乱码。 printf( "%s\n",d); getch(); return 0; } #elif defined THIRD_DEMO #include
#include
#include
#include
int main(void) { char src[] = "******************************"; char dest[] = "abcdefghijlkmnopqrstuvwxyz0123as6"; printf( "destination before memcpy: %s\n", dest); memcpy(dest,src, strlen(src)); printf( "destination after memcpy: %s\n", dest); getch(); return 0; } #elif defined MYMEMCPY #include
#include
#include
#include
void *mymemcpy(void *dest,const void *src,size_t count); int main(void) { char src[] = "******************************"; char dest[] = "abcdefghijlkmnopqrstuvwxyz0123as6"; printf( "destination before mymemcpy: %s\n", dest); mymemcpy(dest,src, strlen(src)); printf( "destination after mymemcpy: %s\n", dest); getch(); return 0; } void *mymemcpy(void *dest,const void *src,size_t count) { char *ret=( char *)dest; char * dest_t=ret; const char * src_t=( char *)src; //append // while(*dest_t!='\0') // { // dest_t++; // } while(count--) { * dest_t++=* src_t++; } return ret; } #elif defined FORTH_DEMO #include
#include
#include
#include
struct { char name[ 40]; int age; }person,person_copy; int main(void) { char myname[]= "Pierre de Fermat"; printf( "sizeof(myname)=%d\n", sizeof(myname)); printf( "strlen(myname)=%d\n", strlen(myname)); memcpy(person.name,myname, strlen(myname)+ 1); person.age= 48; memcpy(&person_copy,&person, sizeof(person)); printf( "person_copy :%s,%d\n",person_copy.name,person_copy.age); getch(); return 0; } #endif

转载地址:http://rqesn.baihongyu.com/

你可能感兴趣的文章
1. 两数之和
查看>>
2. 两数相加
查看>>
JZ1.二维数组的查找
查看>>
String 类
查看>>
什么是接口
查看>>
Java高级篇之进程
查看>>
类加载机制
查看>>
了解jdk1.8版本一些新的特性
查看>>
Java高级篇之网络通讯
查看>>
浅谈篇之线程池
查看>>
Lambda 表达式
查看>>
字符串函数MySQL
查看>>
8个SQL讲解优化
查看>>
MySQL实战续(二)
查看>>
安装Elastic和kibana
查看>>
什么是搜索
查看>>
全文检索工具elasticsearch
查看>>
Vue之条件渲染实战
查看>>
Vue之侦听属性
查看>>
求职指南(1)
查看>>