标签:
1、void* memcpy(void*dst,void const *src,size_t length)
从src的起始位置起复制length个字节到dst的内存起始位置,如果src和dst以任何形式出现重叠,结果未定义。
void* my_memcpy(void *dest, void const *src, size_t length) { assert(dest!= NULL&&src != NULL); char *pdest = (char*)dest; const char *psrc = (char*)src; while (length--) { *pdest++ = *psrc++; } return dest; }
2、void* memmove(void*dst,void const *src,size_t length)
从src的起始位置起复制length个字节到dst内存起始的位置,如果源和目标参数可能存在重叠,应使用mommove。
void* my_memmove(void *dest, void const *src, size_t length) { assert(dest != NULL&&src != NULL); char *pdest = (char*)dest; const char *psrc = (char*)src; if (psrc + length <= pdest || src >= pdest)//可以正常赋值 { while (length--) { *pdest++ = *psrc++; } } else//不能从前往后的赋值,有重叠的情况 { while (length-- ) { *(pdest + length) = *(psrc + length); } } *pdest = ‘\0‘; return dest; }
3、void* memcpy(void*dst,void const *src,size_t length)
注意:因为按照无符号字符逐字节进行比较,如果不用于单字节比较的数据如(int,float),会出现意料之外的结果
int my_memcmp(void* src1, void* src2, int length) { assert(src1 != NULL && src2 != NULL); const char* pSrc1 = (char*)src1; const char* pSrc2 = (char*)src2; while (length-- > 0) { if (*pSrc1++ != *pSrc2++) { return *pSrc1 < *pSrc2 ? -1 : 1; } } return 0; }
4、void* memset(void*dst,int ch,size_t length)
void* my_memset(void* dest, int ch, size_t length) { assert(dest != NULL); char* pDest = (char*)dest; while (length--) { *pDest++ = c; } return dest; }
标签:
原文地址:http://www.cnblogs.com/Blog-day/p/My_Blog_Days_33.html