zoukankan      html  css  js  c++  java
  • 【转】 strcpy和memcpy的区别

    strcpy和memcpy都是标准C库函数,它们有下面的特点。
    strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

    已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
    memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
    void *memcpy( void *dest, const void *src, size_t count );

    void *memcpy(void *dest, const void *src, size_t size)//size_t是一个与机器相关的unsigned类型,头文件stddef.h
    {
        if(NULL==dest||NULL==src)
            return NULL;
    
        char *tempSrc = (char *)src;  
        char *tempDest= (char *)dest;    
        while(size-->0)             
            *tempDest++ = *tempSrc++ ;  
     
        return dest;
    }
    void *memset(void *s,int ch,size_t n)  
    {  
        const unsigned char unch = ch; 
        unsigned char *sr=(unsigned char *)s;  
    
        while(n--)
        {
            *sr = unch;
            sr++;
        }
        return s;  
    } 
    char * strcpy(char * dest, const char * src)
    {
        if(NULL==dest||NULL==src)
            return NULL;
     
        char *strDest = dest;    
        //while ((*strDest++ = *src++)!=''); //把src字符串的内容复制到dest下
        while ( *src != '' )
            *strDest++ = *src++;
        *strDest = '';
     
        return dest;
    }
    char *strcat(char *dest, const char *src) 
    {
        if(NULL==dest||NULL==src)
            return NULL;
    
        char *strDest = dest;
        while(*strDest) //是while(*strDest!=’’)的简化形式,若使用while(*strDest++)则会出错,因为循环结束后strDest还会执行一次++,那么strDest
            strDest++;
    
        while(*strDest++ = *src++)
            NULL; 
    
        return dest;
    }

    strcpy和memcpy主要有以下3方面的区别。
    1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
    2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符""才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
    3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

    转:http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html

  • 相关阅读:
    hdu 3790 最短路径问题
    hdu 2112 HDU Today
    最短路问题 以hdu1874为例
    hdu 1690 Bus System Floyd
    hdu 2066 一个人的旅行
    hdu 2680 Choose the best route
    hdu 1596 find the safest road
    hdu 1869 六度分离
    hdu 3339 In Action
    序列化和反序列化
  • 原文地址:https://www.cnblogs.com/eleclsc/p/5890127.html
Copyright © 2011-2022 走看看