memcpy memmove strcat strcopy strlen实现

转载 2007年10月06日 21:27:00

1. 如何实现如下copy函数,高手指教:
void memcopy(void *s,void *t, int length)
/* 要求实现内存拷贝length长度内容,源为*t,目的为*s    */
希望大家讨论,看如何正确的实现!

考虑到源地址和目的地址交叉的情况:
#include <stdio.h>
#include <memory.h>
#include <string.h>

//考虑到源地址和目的地址交叉的情况
void * my_memcpy( void *dest, const void *src, size_t count )
{
 unsigned char *psrc = (unsigned char*) src;
 unsigned char *pdst = (unsigned char*) dest;

 if (!pdst || !psrc || count <= 0)
  return dest;
 
 if (psrc < pdst) // 目的地址比源地址高,从后开始拷贝
 {
  psrc += count-1;
  pdst += count-1;
  
  do {
   *pdst-- = *psrc--;
  } while(--count);
 }
 else if (psrc > pdst) // 目的地址比源地址低,从前开始拷贝
 {
  do {
   *pdst++ = *psrc++;
  } while (--count);
 }
 
 return dest;
}

void * __cdecl memmove (
        void * dst,
        const void * src,
        size_t count
        )
{
        void * ret = dst;

        if (dst <= src || (char *)dst >= ((char *)src + count)) {
                /*
                 * Non-Overlapping Buffers
                 * copy from lower addresses to higher addresses
                 */
                while (count--) {
                        *(char *)dst = *(char *)src;
                        dst = (char *)dst + 1;
                        src = (char *)src + 1;
                }
        }
        else {
                /*
                 * Overlapping Buffers
                 * copy from higher addresses to lower addresses
                 */
                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);
}

2. 编写一个标准strcpy函数

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

 return address;
}

3. strlen函数

size_t strlen( const char *str ) //输入参数const
{
 
char *old = str;
 assert( str != NULL ); //断言字符串地址非0
 
 while( *str++ );
  
 
return str-old-1;
}

4.strcat实现
char *my_strcat(char *dest,char *src)
{
 if ( NULL == dest || NULL == src)
 {
  return NULL;
 }
 while ( *dest++ != '/0');
 dest -= 1;
 while ( ( *dest++ = *src++) != '/0');
}

 

相关文章推荐

memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现

为区别库函数,函数名首字母大写。 Memcmp函数: //内存区域内容比较函数 int Memcmp(const void *buf1,const void *buf2,unsigne...

模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)

一、字符串操作         strcpy(str1,str2) 复制字符串         strcat(str1,str2) 附加字符串         strlen(str) 取字符串长度 ...

部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr

#include #include #include //////////////////////////////////////////////////// //Convert cha...

mem系列函数(memset memcpy memmove) 和str系列函数(strlen strcpy strcmp strcat strstr strtok)

void *memset(void *s, int ch, size_t n);  函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s ...

模拟实现//strcpy //strncpy //strcat //strncat //strcmp //strncmp //memcpy //memmove

//strcpy//strncpy//strcat//strncat//strcmp//strncmp//memcpy//memmove以上函数都是库函数,现在我来模拟实现他们的功能,其他的也不多说了...

字符串函数的原型实现(strcpy, strcat, strcmp, memset, memcpy, memmove)

C++字符串原型函数实现

模拟实现函数库中的各种常用函数,1实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove

————– 1模拟实现strcpy—————strcpy函数是将源字符串复制到目标字符串的函数strcpy函数的思路就是,它是一个字符串,有\0作为结束标志,那么可以用\0作为突破点和条件,具体代码如...

几个常用函数的实现strcpy,memcpy,memmove,strcat,strcmp

1.  strcpy 函数原型: char * strcpy(char * strDest,const char * strSrc); 具体实现: char * strcpy(cha...

模拟实现C库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove

1、模拟实现strcpy char *my_strcpy( char *dest, const char *str) { assert(dest != NULL); assert(str != N...

memcpy,memmove,strcpy,strcat等系列函数的实现(二)

、strcat函数:  1、定义函数: extern char *strcat(char *dest,char *src); 把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0'...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memcpy memmove strcat strcopy strlen实现
举报原因:
原因补充:

(最多只允许输入30个字)