//
// main.cpp
// AUTO_PRO
//
// Created by yanzhengqing on 12-12-11.
// Copyright (c) 2012年 yanzhengqing. All rights reserved.
//
#include <iostream>
using namespace std;
#ifdef _MSC_VER
#pragma function(memcpy) //微软貌似将这个函数禁用了,具体可以查阅微软年度的pragma
#endif
/***
*memcpy - Copy source buffer to destination buffer
*
*Purpose:
* memcpy() copies a source memory buffer to a destination memory buffer.
* This routine does NOT recognize overlapping buffers, and thus can lead
* to propogation.
*
* For cases where propogation must be avoided, memmove() must be used.
*
*Entry:
* void *dst = pointer to destination buffer
* const void *src = pointer to source buffer
* size_t count = number of bytes to copy
*
*Exit:
* Returns a pointer to the destination buffer
*
*Exceptions:
******************************************************/
/////////////////////////////////////////////////////////////////////////////////
/*说明:
1. __cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。
2. 将n字节长的内容从一个内存地址复制到另一个地址;如果两个地址存在重叠,则最终行为未定义。
3. 按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作,即不能对void指针进行如p++的操作,所以需要转换为具体的类型指针来操作,例如char *。(这条引用网友的结论)
*/
void *__cdecl memcpy (
void * dst,
constvoid * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC)
{
externvoid RtlMoveMemory(void *,constvoid *, 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 = (char *)src +1;
}
#endif /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */
return(ret);
}
int main()
{
constchar src[50] ="blog.csdn.net/barry_yan";
char dst[50] = {0};
cout<<"Before memcpy dest = \n"<<dst<<endl;
memcpy(dst, src,strlen(src)+1); //记得末尾的'/0'
cout<<"After memcpy dest = \n"<<dst<<endl;
return 0;
}
///////////////////////////////////////////////////////////////////////////////////
实例实验:
Before memcpy dest =
After memcpy dest =
blog.csdn.net/barry_yan
string - memcpy源码
最新推荐文章于 2023-05-04 15:44:52 发布