void* memcpy(void* dst, const void* src, int size)
2015-03-18 10:12
399 查看
#include <string.h>
void *memcpy(void *to, const void *from, size_t count)
函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。
在C99中,to和from由restrict修饰。
先来看看微软的实现:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_IA64)
{
extern void RtlMoveMemory( void *, const void *, size_t count );
RtlMoveMemory( dst, src, count );
}
#else
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
#endif
return(ret);
}
再来看看coreutils中的实现:
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++;
return destaddr;
}
再来看Linux中实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
void *memcpy(void *to, const void *from, size_t count)
函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。
在C99中,to和from由restrict修饰。
先来看看微软的实现:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_IA64)
{
extern void RtlMoveMemory( void *, const void *, size_t count );
RtlMoveMemory( dst, src, count );
}
#else
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
#endif
return(ret);
}
再来看看coreutils中的实现:
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++;
return destaddr;
}
再来看Linux中实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
相关文章推荐
- void *memcpy(void *dst,void const *src,size_t len):从src的起始位置复制len个字节到dst的内存起始位置。可以用这种方法复制任何类型的值。
- 不要使用库函数,写出void *memcpy(void *dst, const void *src, size_t count),其中dst是目标地址,src是源地址。
- memcpy函数的使用总结void *memcpy(void *dest, const void *src, size_t n);
- void* mymemcpy( void* dest, const void* src, size_t count )
- 实现内存复制函数void * memcpy(void *dst,void *src,int count).
- 算法17:实现memcpy(void *src, int size, void *dest)
- static void cvTsDistTransform( const CvMat* _src, CvMat* _dst, int dist_type, intmask_size, float* _
- void* mymemcpy( void* dest, const void* src, size_t count )
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- Error处置:Invalid arguments ' Candidates are: void * memcpy(void * const void * ?)
- 百度面试题——用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- CentOS 6.3 下的 memcpy 中的src 和 dst 不能有overlap!
- Error处理:Invalid arguments ' Candidates are: void * memcpy(void *, const void *, ?) Error处理:Invalid
- android canvas void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
- void *memcpy(void *pvTo, const void *pvFrom, size_t size)
- Error处理:Invalid arguments ‘ Candidates are: void * memcpy(void *, const void *, ?)
- int av_packet_ref(AVPacket *dst, const AVPacket *src)源码分析
- 不调用库函数,实现字符串复制函数char * strcpy(char * dst, const char * src) C/C++软件开发求职面试题 必备考点(二)