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;
    }
    
  • 相关阅读:
    Static了解和复习继承。
    复习篇1.对象和封装
    第一章笔记
    A + B Problem II
    Number Sequence
    Fibonacci Again
    8615 快乐
    8635 气球
    大牛之路II
    8617 阶乘数字和
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13284295.html
Copyright © 2011-2022 走看看