• <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   管理


            久久久久人妻一区精品果冻| 狠狠精品久久久无码中文字幕| 久久精品水蜜桃av综合天堂| 少妇久久久久久久久久| 久久久久久亚洲精品成人| 99久久精品免费看国产| 久久久一本精品99久久精品88| 久久免费小视频| 久久精品国产亚洲AV久| 久久99国产亚洲高清观看首页| 思思久久99热只有频精品66| 国产精品美女久久久m| 欧美亚洲国产精品久久久久| 国产成人精品白浆久久69| 漂亮人妻被中出中文字幕久久| 亚洲一本综合久久| 国产精品99久久99久久久| 欧美黑人激情性久久| 久久无码AV中文出轨人妻| 精品久久777| 精品国产VA久久久久久久冰| 久久久久久精品免费看SSS| 久久中文字幕无码专区| 国产一区二区精品久久岳| 久久综合九色综合97_久久久| 久久夜色精品国产欧美乱| 无夜精品久久久久久| 色婷婷久久久SWAG精品| 国产高潮久久免费观看| 好久久免费视频高清| 狠狠色丁香久久综合五月| 久久精品国产亚洲av麻豆色欲 | 国产成人精品久久综合| 潮喷大喷水系列无码久久精品| 7777精品久久久大香线蕉| 亚洲精品无码成人片久久| 无码AV波多野结衣久久| 亚洲成色WWW久久网站| 久久久久人妻精品一区| 久久99国产精品久久99| 97精品国产97久久久久久免费 |