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;
    }
    
  • 相关阅读:
    后端程序员之路 6、Python fabric
    后端程序员之路 5、.conf、libconfig
    后端程序员之路 4、一种monitor的做法
    后端程序员之路 3、fastcgi、fastcgi++
    后端程序员之路 2、nginx、php
    后端程序员之路 1、linux、centos
    F#之旅9
    F#之旅8
    F#之旅7
    F#之旅6
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13284295.html
Copyright © 2011-2022 走看看