• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            strcpy與memcpy以及strncpy

            1. strcpy函數(shù)

               strcpy提供了字符串的復(fù)制。即strcpy只用于字符串復(fù)制,并且它不僅復(fù)制字符串內(nèi)容之外,還會(huì)復(fù)制字符串的結(jié)束符。

               函數(shù)原型及實(shí)現(xiàn):

            [c-sharp] view plaincopy
            1. char* strcpy(char* strDst, const char* strSrc)      
            2. {  
            3.     assert((strDst != NULL) && (strSrc != NULL));  
            4.     char* address = strDst;   
            5.     while((*strDst++ = *strSrc++) != '/0');  
            6.     return address;  
            7.   }  
              

             

              注意:

              1. 該函數(shù)會(huì)連同字符串的結(jié)束字符'/0'一起拷貝到字符數(shù)組中,故字符數(shù)組的長(zhǎng)度應(yīng)該至少是字符串的長(zhǎng)度加1。

              例:

              char str[] = "123456";

              這里str是一個(gè)字符數(shù)組,它存放了一個(gè)字符串"123456",由于字符串還有一個(gè)結(jié)束符"/0",所以此數(shù)組的長(zhǎng)度為7而不是6。

             

               char *str = "123456";  //該字符串的長(zhǎng)度為6(字符串以字符'/0'結(jié)尾,不計(jì)入字符串長(zhǎng)度)

               char   dst[7];   //字符數(shù)組的長(zhǎng)度必須至少為字符長(zhǎng)度加1,如6+1=7。

               strcpy(dst, str);

              2. 該函數(shù)會(huì)拷貝字符串的內(nèi)容直至遇到第一個(gè)字符值為0的字符(第一個(gè)字符值為0的字符也會(huì)被拷貝),故如果一個(gè)字符串或字符數(shù)組含

                 有大量的值為0的數(shù)據(jù),則不宜用該函數(shù)進(jìn)行拷貝操作,可用memcpy函數(shù)。

             

            2. memcpy函數(shù)

               memcpy提供了一般內(nèi)存的復(fù)制。即memcpy對(duì)于需要復(fù)制的內(nèi)容沒(méi)有限制,因此用途更廣。

               該函數(shù)將一個(gè)大小為size的內(nèi)存段的值拷貝到另一內(nèi)存段中。

               其實(shí)現(xiàn)如下:

            [c-sharp] view plaincopy
            1. void *memcpy(void *memTo, const void *memFrom, size_t size)     
            2. {  
            3.     assert((memTo != NULL) && (memFrom != NULL)); //memTo和memFrom必須有效  
            4.     char *tempFrom = (char *)memFrom;             //保存memFrom首地址  
            5.      char *tempTo = (char *)memTo;                  //保存memTo首地址  
            6.     while(size -- > 0)                //循環(huán)size次,復(fù)制memFrom的值到memTo中  
            7.         *tempTo++ = *tempFrom++ ;   
            8.     return memTo;   
            9. }  
              

             

             

            3. strcpy與memcpy的區(qū)別

              3.1 復(fù)制的內(nèi)容不同。

                 strcpy只能復(fù)制字符串,而memcpy可以復(fù)制任意內(nèi)容,例如字符數(shù)組、整型、結(jié)構(gòu)體、類(lèi)等。

              3.2 復(fù)制的方法不同。

                 strcpy不需要指定長(zhǎng)度,它遇到字符串結(jié)束符"/0"便結(jié)束。memcpy則是根據(jù)其第3個(gè)參數(shù)決定復(fù)制的長(zhǎng)度。

              3.3 用途不同。

                 通常在復(fù)制字符串時(shí)用strcpy,而需要復(fù)制其他類(lèi)型數(shù)據(jù)時(shí)則一般用memcpy。

             

            4. strncpy

            strncpy的實(shí)現(xiàn)如下

            [c-sharp] view plaincopy
            1. char *strncpy(char *dst, const char *src, size_t count)  
            2. {  
            3.         assert((dst != NULL) && (src != NULL));  
            4.         char *tmp = dst;  
            5.   
            6.         while (count-- && (*dst++ = *src++) != '/0')  
            7.         {  
            8.                 /* nothing */;  
            9.         }  
            10.   
            11.         return tmp;  
            12. }  

             

            該函數(shù)用于拷貝count個(gè)字符。

             

            注意:

            1. count一定要小于dst的大小。

            2.調(diào)用完該函數(shù)后一定要加上一句:dst[count] = '/0';否則不安全,如strlen等函數(shù)要求參數(shù)必須是以'/0'結(jié)尾的字符串。

               因?yàn)楫?dāng)count小于src的大小時(shí),src的結(jié)束字符'/0'并不會(huì)被拷貝,故應(yīng)該為dst加上一個(gè)結(jié)束符。

            例:

            [c-sharp] view plaincopy
            1. char *str = "123456";  
            2.   
            3. char dst[7];  
            4.   
            5. int count = 6;  
            6.   
            7. strncpy(dst, str, count);  //count=6一定要小于dst的長(zhǎng)度(7)。  
            8.   
            9. dst[count] = '/0'; 

            posted on 2012-03-28 20:01 大龍 閱讀(415) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久青青草原国产精品免费| 久久精品国产72国产精福利| 精品久久久中文字幕人妻| 日本人妻丰满熟妇久久久久久| 中文字幕久久久久人妻| 久久精品嫩草影院| 欧美激情一区二区久久久| 国产精品福利一区二区久久| 99久久免费国产精品特黄| 91亚洲国产成人久久精品网址| 久久99九九国产免费看小说| 99久久精品国产一区二区三区 | 久久精品国产99国产电影网 | 欧美久久一级内射wwwwww.| 狠狠色噜噜色狠狠狠综合久久| 久久精品aⅴ无码中文字字幕重口| 久久婷婷色综合一区二区| 99999久久久久久亚洲| 亚洲愉拍99热成人精品热久久| 91久久精品视频| 成人久久免费网站| 久久青青草原精品国产不卡| 久久精品人人做人人爽电影蜜月| 亚洲人成网站999久久久综合| 91麻豆精品国产91久久久久久| 国产亚洲美女精品久久久2020| 久久精品国产亚洲7777| 一级做a爰片久久毛片16| 国产精品青草久久久久婷婷| 久久午夜无码鲁丝片| 亚洲成色www久久网站夜月| 亚洲日本va午夜中文字幕久久 | 久久久久人妻精品一区二区三区| 久久久受www免费人成| 久久精品亚洲精品国产欧美| 国内精品人妻无码久久久影院| 一本色道久久88—综合亚洲精品 | 日本WV一本一道久久香蕉| 一本色综合久久| 亚洲精品乱码久久久久久久久久久久 | 国产成人久久精品麻豆一区|