• strcpy 和 memcpy自实现


      都是套路,详见代码注释:

    #include <stdio.h>
    #include <assert.h>
    #include <iostream>
    
    using namespace std;
    
    char* myStrcpy(char *dest, const char *sour)
    {
         assert(dest != NULL && sour != NULL);//断言dest 和 sour都不为空,如果为空将会报错
         char *ret = dest;//函数实现复制功能本身可以不用返回参数,这里是为了使用链式结构,返回char*。比如:int len = strlen(myStrcpy(str1,str2))
         while((*dest ++ = *sour++) != '');
         return ret;
    }
    
    //函数原型:定义在string.h中 也是拷贝字符串用的。size个字节拷贝到目的内存起始的地址中。小心使用也是可以用来复制各种数据类型的。
    //void *memcpy(void *dst, const void *src, size_t n);
    //If copying takes place between objects that overlap, the behavior is undefined.
    //对于地址重叠的情况,该函数的行为是未定义的。
    //标准库中实现了memmove函数,该函数可以实现无内存重叠,功能是把源字符串拷贝到buff中,然后在写入到目的字符串中,增加了不必要的开销。
    void *myMemcpy(void *dst, const void *src, size_t size)
    {
         assert(dst && src);
         char *psrc;//记录src地址
         char *pdst;//记录dst地址
    //s------- size-----c
    //      d-----s--------t
         if(src < dst && (char *)src + size > (char *)dst ){
              psrc = (char*)src + size - 1;
              pdst = (char*)dst + size - 1;
              while(size --){
                   *pdst -- = *psrc --;
              }
         }else{
              psrc = (char *)src;
              pdst = (char *)dst;
              cout<<psrc<<endl;
              while(size --){
                   *pdst ++  = *psrc ++;
              }
         }
         return dst;
    }
    
    int main()
    {
         char str [10] = "abc";
         char dst[10] ;
         int s[10] = {1,2,3};
         int d[10];
         myMemcpy(dst, str, 2);
         dst[2] = '';
         puts(dst);
         myMemcpy(d, s, 3 * 4);
         cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
         return 0;
    }
  • 相关阅读:
    201521123028 《Java程序设计》第5周学习总结
    Markdown格式
    201521123028《Java程序设计》第4周学习总结
    201521123028 《Java程序设计》第3周学习总结
    Spring07 JDBC
    Spring06 Aop
    Mystring05 配置文件之间的关系
    Mybatais 13 二级缓存
    Mybatais 14 注释的配置
    Mybatais 12 一级缓存
  • 原文地址:https://www.cnblogs.com/luntai/p/6125149.html
Copyright © 2020-2023  润新知