memcpy用法 memcpy

memcpy是什么意思memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 。
Windows中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void* __cdecl memcpy(
void* dst,
const void* src,
size_t count
)
{
void*ret=dst;
#if defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)
{
extern void RtlMoveMemory(void *,const void *,size_t count);
RtlMoveMemory(dst,src,count);
}
#else /*defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)*/
/*
*copy from lower addresses to higher addresses
*/
while(count--){
*(char *)dst = *(char *)src;
dst = (char *)dst+1;
src = https://www.doubo5.com/(char *)src+1;
}
#endif/*defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)*/
return (ret);
}
coreutils中
1
2
3
4
5
6
7
8
9
10
void* memcpy(void*destaddr,voidconst*srcaddr,size_tlen)
{
char* dest=destaddr;
char const* src=https://www.doubo5.com/srcaddr;
while(len--0)
{
*dest++ = *src++;
}
return destaddr;
}
Linux中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
void *memcpy(void *to, const void *from, size_t n)
{
void *xto = to;
size_t temp, temp1;
if (!n)
return xto;
if ((long)to1) {
char *cto = to;
const char *cfrom = from;
【memcpy用法 memcpy】*cto++ = *cfrom++;
to = cto;
from = cfrom;
n--;
}
if (n2(long)to2) {
short *sto = to;
const short *sfrom = from;
*sto++ = *sfrom++;
to = sto;
from = sfrom;
n -= 2;
}
temp = n2;
if (temp) {
long *lto = to;
const long *lfrom = from;
#if defined(CONFIG_M68000) || defined(CONFIG_COLDFIRE)
for (; temp; temp--)
*lto++ = *lfrom++;
#else
asm volatile (
"movel %2,%3\n"
"andw#7,%3\n"
"lsrl#3,%2\n"
"negw%3\n"
"jmp%%pc@(1f,%3:w:2)\n"
"4:movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"movel %0@+,%1@+\n"
"1:dbra%2,4b\n"
"clrw%2\n"
"subql #1,%2\n"
"jpl4b"
: "=a" (lfrom), "=a" (lto), "=d" (temp), "=d" (temp1)
: "0" (lfrom), "1" (lto), "2" (temp));
#endif
to = lto;
from = lfrom;
}
if (n2) {
short *sto = to;
const short *sfrom = from;
*sto++ = *sfrom++;
to = sto;
from = sfrom;
}
if (n1) {
char *cto = to;
const char *cfrom = from;
*cto = *cfrom;
}
return xto;
}
程序例example1
作用:将s中的字符串复制到字符数组d中 。
1
2
3
4
5
6
7
8
9
10
11
12
13
//memcpy.c
#include stdio.h
#include string.h
int main()
{
char* s="GoldenGlobalView";
char d[20];
clrscr();
memcpy(d,s,(strlen(s)+1));
printf("%s",d);
getchar();
return 0;
}
输出结果:Golden Global View
example2
作用:将s中第13个字符开始的4个连续字符复制到d中 。(从0开始)
1
2
3
4
5
6
7
8
9
10
11
#includestring.h
int main(
{
char* s="GoldenGlobalView";
char d[20];
memcpy(d,s+12,4);//从第13个字符(V)开始复制,连续复制4个字符(View)
d[4]='\0';//memcpy(d,s+12*sizeof(char),4*sizeof(char));也可
printf("%s",d);
getchar();
return 0;
}
输出结果: View
example3
作用:复制后覆盖原有部分数据
1
2
3
4
5
6
7
8
9
10

秒懂生活扩展阅读