Strcpy函数的实现
Posted DeanBoyLoveLinux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Strcpy函数的实现相关的知识,希望对你有一定的参考价值。
(1)strcpy函数没有处理内存重叠的情况,所以内存重叠时使用这个函数会让程序崩溃
函数原型为:
char * strcopy(char *dst, char *src, int n)
{
char *addr = dst;
assert((dst != NULL) && (src != NULL) );
while((*dst++ = *src++) != ‘\0‘)
NULL;
return addr ;
}
(2)memcpy也没有考虑到内存重叠
void *memcpy(void *dst, void *source, int count)
{
char *tmp_dest = (char *)dest;
char *tmp_source = (char *)source;
assert((dst != NULL) & (src != NULL));
while(count--)
{
*tmp_dest ++ = *tmp_source ++;
}
return dest;
}
(3)memmove考虑到了内存重叠的情况
1 void *memmove(void *dest, const void *source, size_t count) 2 { 3 assert((NULL != dest) && (NULL != source)); 4 char *tmp_source, *tmp_dest; 5 tmp_source = (char *)source; 6 tmp_dest = (char *)dest;
7 if((dest + count < source) || (source + count) < dest)) 8 { // 如果没有重叠区域 9 while(count--) 10 *tmp_dest++ = *tmp_source++; 11 } 12 else 13 { //如果有重叠(反向拷贝) 14 tmp_source += count - 1; 15 tmp_dest += count - 1; 16 while(count--) 17 *--tmp_dest = *--tmp; 18 } 19 return dest; 20 }
以上是关于Strcpy函数的实现的主要内容,如果未能解决你的问题,请参考以下文章