您的位置:首页 > 编程语言 > C语言/C++

【基础C&C++】内存拷贝strcpy,memcpy,memmove,strncpy源码

2012-09-03 22:51 369 查看

strcpy

char *strcpy(char*strDest, const char *strSrc)
{
assert((strDest!=NULL) && (strSrc!=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != '\0')
NULL ;
return address ;

}

memmove

void *memmove(void *dst, const void*src, size_tcount)
{
void* ret = dst;
if(dst <= src || (char *)dst >= ((char *)src + count)) {//不重叠或,拷贝不覆盖还未读的src
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
}
else{//逆向拷贝
dst= (char *)dst + count - 1;
src= (char *)src + count - 1;
while(count--) {
*(char*)dst = *(char *)src;
dst= (char *)dst - 1;
src= (char *)src - 1;
}
}
return(ret);

}


memcpy

和strcpy一样

void *memcpy(void*pvTo, void* pvFrom, size_t size) //byte是java里的变量类型
{
void * ret = dst;

while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}


memset

void* memset(void* buffer, int c, int count)
{
char* pvTo=(char*)buffer;
assert(buffer != NULL);
while(count-->0)
*pvTo++=(char)c;
return buffer;
}


strncpy

char *  strncpy (char * dest,const char * source,size_tcount)
{
char *start = dest;

while (count && (*dest++ =*source++)) /* copy string */
count--;

if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: