C语⾔中字符串拷贝(strcpy)与内存拷贝(memcpy)的实现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;
}
函数传⼊参数有内存重叠时,实现如下:
字符串拷贝函数strcpy作用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;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论