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

C语言中字符串拷贝(strcpy)与内存拷贝(memcpy)的实现

2014-01-20 15:53 453 查看
1.字符串拷贝的实现

函数原型具体如下:

char* strcpy(char* dest, const char* src);该函数的两个字符指针参数所指向的内存会从外面传进来。

说明:如果src字符串长度比dest字符串长度要长,那么在复制的时侯,多余的字符任将被复制,它们将覆盖原先存储于dest数组后面的内存空间的值;这样的结果是未定义的,可以用strncpy来替代strcpy来预防该问题。

函数简单实现如下:

char* strcpy(char* dest, const char* src)

{

if (dest == NULL || src == NULL) return NULL;

char* temp = dest;

*temp = *src;

while(*temp != '\0')

{

temp++;

src++;

*temp = *src

}

//简单版while((*temp++ = *src++) != '\0'); while(*temp++ = *src++)

return dest;

}

函数传入参数有内存重叠时,实现如下:

char* strcpy(char* dest, const char* src)

{

if (dest == NULL || src == NULL) return NULL;

char* temp = dest;

int length = strlen(src);

int i;

if (dest > src && dest < src + length)

{

for(i = length; i > 0; i--)

{

dest[i] = src[i];

}

}

else

while((*temp++ = *src++) != '\0');

return dest;

}

2.内存拷贝的实现:

函数原型具体如下:

void* memcpy(void* dest, const void* src, int size);void*可以指向任何类型的指针

函数简单实现如下:

void* memcpy(void* dest, const void* src, int size)

{

if (dest == NULL || src ==NULL || size == 0) return NULL;

char* temp = (char*)dest;

while(size--)

{

*temp++ = *(char*)src++;

}

return dest;

}

函数传入参数有内存重叠时,实现如下:

void* memcpy(void* dest, const void* src, int size)

{

if (dest == NULL || src ==NULL || size == 0) return NULL;

char* temp = (char*)dest;

int i;

if (dest > src || dest < src + size)

{

for(i = size; i > 0; i--)

{

temp[i] = src[i];

}

}

else

{

while(size--)

{

*temp++ = *(char*)src++;

}

}

return dest;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: