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;
}
函数原型具体如下:
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;
}
相关文章推荐
- 【c语言】 my_strcpy 实现字符串拷贝
- c语言:两种方法实现字符串拷贝strcpy
- 实现字符串拷贝strcpy和memcpy,以及字符串比较函数strcmp
- C语言中的字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- C语言字符串相关库函数的实现strcpy、memcpy、strncpy、strcat、strncpy、memset、memcpy、strcpy
- C语言中的字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- C语言如何调用 memcpy 函数 实现内存拷贝
- c语言:两种方法实现字符串拷贝strcpy
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 【转】字符串操作函数 C语言实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 字符串拷贝与内存拷贝的区别 c语言--memcpy()
- C语言:向函数传递和返回字符串:Strlen函数、Strcpy、Strcat函数函数的实现
- C语言调用汇编语言 实现字符串拷贝
- 防御编程之字符串拷贝 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy
- 内存拷贝strcpy(),memcpy(),memmove()比较
- C语言:字符串函数(strcpy,memcpy等)模拟实现
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 5、不用库函数,实现C语言中的字符串拷贝charcpy()
- 用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
- c++字符串拷贝几个方法浅析sprintf,strcpy及memcpy