乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      strcpy與memcpy以及strncpy

       水中麒麟 2013-09-13

      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;      // 保存Dest 的首地址,以便返回
      5.     while((*strDst++ = *strSrc++) != '/0');  
      6.     return address;  
      7.   }  
        

       

        注意:

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

        例:

        char str[] = "123456";

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

       

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

         char   dst[7];   //字符數(shù)組的長度必須至少為字符長度加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)容沒有限制,因此用途更廣。

         該函數(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)體、類等。

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

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

        3.3 用途不同。

           通常在復(fù)制字符串時(shí)用strcpy,而需要復(fù)制其他類型數(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的長度(7)。  
      8.   
      9. dst[count] = '/0';  
              

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多