zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    OAuth2集成——《跟我学Shiro》
    Spring的servlet context和application context
    Spring MVC中如何指定某个类或方法自适配地响应某个HTTP请求?
    spring security的标签库
    使用 Spring 2.5 基于注解驱动的 Spring MVC
    在数据库历史上最重要的人物简介
    工作流引擎Activiti使用总结
    Activiti初学者教程
    比较Activiti中三种不同的表单及其应用
    Activiti工作流引擎使用
  • 原文地址:https://www.cnblogs.com/luntai/p/6125149.html
Copyright © 2011-2022 走看看