zoukankan      html  css  js  c++  java
  • 自己实现memcpy,strcpy与strncpy

    内存拷贝函数

    //实现拷贝不重叠的内存块
    void* memcpy1(void* dst,const void* src,size_t count)    
    {   
        char* pTo = (char*)dst;
        char* pFrom = (char*)src;
        assert(dst != NULL && src != NULL);
        assert(pTo >= pFrom+count || pTo <= pFrom-count);//防止内存重叠(over    lap)    
        while(count-- > 0)
        {   
            *pTo++ = *pFrom++;
        }   
        return dst;
    }
    #include<stdio.h>
    
    char* mystrcat(char* str1,char* str2)//连接
    {
        char* p=str1;
        while (*str1 !='')
        {
            str1++;
        }
        //  while(*str1++);
        while (*str2 != '')
        {
            *str1=*str2;
            str1++;
            str2++;
        }
        //  while (*str1++ = *str2++);
        *str1='';
        return p;
    }
    
    char* mystrcpy(char* str1,char* str2)
    {
        char*p = str1;
        while (*str1++ = *str2++);
        return p;
    }
    
    char* mystrncpy(char* str1,char* str2,int n)
    {
        char* p=str1;
        for (;*str2!=''&&n>0;n--)
        {
            *str1 = *str2;
            str1++;
            str2++;
        }
        *str1='';
        return p;
    }
    
    int mystrcmp(char* str1,char* str2)
    {
        while(1)
        {
            if(*str1==*str2 && *str1 !='')
            {
                str1++;
                str2++;
            }
            else if (*str1==*str2 && *str1=='')
                return 0;
            else if(*str1>*str2)
                return 1;
            else
                return -1;
        }
    }

     字符串拷贝

    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    char* Mystrcpy(char* dst,const char* src)
    {
        if(dst == NULL || src == NULL)
            return NULL;
        int i = 0;
        for(i = 0;src[i] != '';i++)
        {
            dst[i] = src[i];
        }
        dst[i] = '';
        return dst;
    }
    char* Mystrncpy(char *dest, const char *src, size_t n)
    {
        if(dest == NULL || src == NULL)
            return NULL;
        int i;
        for (i = 0; i < n && src[i] != ''; i++)
          dest[i] = src[i];
        for ( ; i < n; i++)
            dest[i] = '';
    
        return dest;
    }
    
    int main()
    {
        char dst[10];
        char dst1[4];
        char src[] = "hello";
        Mystrcpy(dst,src);
        cout << dst << endl;
        Mystrncpy(dst1,src,3);
        cout << dst1 << endl;
        return 0;
    }
    //结果:
    /*
    hello
    hel
    */
  • 相关阅读:
    SQLite Select语句的意外发现
    和一个经理人谈话的经典语句
    [转]如何动态增长一个数组的大小
    [转]Spring AOP中文教程
    为Wildfish框架增加方法调用日志[Aspectsharp]
    第四周学习心得
    《大道至简:软件工程实践者的思想》观后感
    第三周学习心得
    暑假第一周Java学习心得
    第二周学习心得
  • 原文地址:https://www.cnblogs.com/nanqiang/p/9955160.html
Copyright © 2011-2022 走看看