• 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;
    }
    
  • 相关阅读:
    Java/IO流
    Java实现IO通信(服务器篇)
    利用哈夫曼二叉树实现文件的压缩
    关于字符串构建,连接,查找
    线程小球
    准备造一个轮子,关于图片浏览器的
    IOS之循环引用
    ARC
    构造方法与快速创建对象
    autorelease
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13284295.html
Copyright © 2020-2023  润新知