zoukankan      html  css  js  c++  java
  • strcpy和memcpy的实现

    函数strcpy

    字符串拷贝函数,原型:

    char *strcpy(char* dest, const char *src);
    

    从src逐字节拷贝到dest,直到遇到''结束,因为没有指定长度,可能会导致拷贝越界,造成缓冲区溢出漏洞,安全版本是strncpy函数。

    自己写strcpy:

     char * strcpy(char * strDest,const char * strSrc)
    {
        if ((strDest==NULL)||strSrc==NULL))                     
           return NULL;    
        char * strDestCopy=strDest; 
        while ((*strDest++=*strSrc++)!=''); 
        *strDest = '';
        return strDestCopy;
    }
    

    函数memcpy

    从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。

    void  *memcpy(void *s1,  const void *s2,  size_t  n);
    

    函数memcpy返回s1的值。

    自己写memcpy:

    void * memcpy(void *dst, void *src, int num){
    	if (dst == NULL || src == NULL || num <= 0)
    		return NULL;
    	char *pdst = (char *)dst;
    	char *psrc = (char *)src;
    	if (psrc < pdst&&pdst < psrc + num){
    		pdst = pdst + num - 1;
    		psrc = psrc + num - 1;
    		while (num--){
    			*pdst = *psrc;
    			pdst--;
    			psrc--;
    		}
    	}
    	else{
    		while (num--){
    			*pdst = *psrc;
    			pdst++;
    			psrc++;
    		}
    	}
    	return dst;
    }
    
  • 相关阅读:
    数组的排序
    2017-2018学年实习心得
    2017-2018学年实习总结
    古人警句
    课程意见
    第二次冲刺第十天
    第二次冲刺第九天
    第二次冲刺第八天
    第二天冲刺第七天
    第二次冲刺第六天
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13284295.html
Copyright © 2011-2022 走看看