jasmine214--love

          只有當(dāng)你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          memset,memcpy,strcpy 的區(qū)別

          Posted on 2010-08-14 18:23 幻海藍(lán)夢 閱讀(517) 評論(0)  編輯  收藏 所屬分類: C++
           

          原文:http://www.cnblogs.com/sophia0405/archive/2008/10/23/1293189.html
           memset,memcpy,strcpy 的區(qū)別

          一.函數(shù)原型
             strcpy
             extern char *strcpy(char *dest,char *src);
             #include <string.h>
            
          功能:把src所指由NULL結(jié)束的字符串復(fù)制到dest所指的數(shù)組中
             說明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。
             返回指向dest的指針

          memcpy
          extern void *memcpy(void *dest,void *src,unsigned int count);
          #include <string.h>
             功能:由src所指內(nèi)存區(qū)域復(fù)制count個(gè)字符串到dest所指內(nèi)存區(qū)域.
             說明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針.
            
             memset
             extern void *memset(void *buffer,int c,int count);
             #include <string.h>
             功能:把buffer所指內(nèi)存區(qū)域的前count個(gè)字節(jié)設(shè)置成字符c
             說明:返回指向buffer的指針.


           

          二.區(qū)別
              memset
          用來對一段內(nèi)存空間全部設(shè)置為某個(gè)字符,一般用于在對定義的字符串初始化為' '或者'"0';
              例: char a[100];
                    memset(a,'"0',sizeof(a));
             
             memcpy 是用來做內(nèi)存拷貝,可以用來拷貝任何數(shù)據(jù)類型的對象,可以指定拷貝的數(shù)據(jù)長度;
             例:
                     char a[100],b[50];
                     memcpy(b,a,sizeof(b));   //注意:如果使用sizeof(a),會造成內(nèi)存溢出
             mem是一段內(nèi)存,他的長度,必須自己記住.memcpy是見著什么拷貝什么。
             
              strcpy 就只能拷貝字符串,它遇到'"0'就結(jié)束拷貝;
                例:char a[100],b[50];
                        strcpy(a,b);
                        如用strcpy(b,a)要注意a中的字符串長度(第一個(gè)'"0'之前) 是否超過50,如果超過,則會造成b的
          內(nèi)存溢出.它是不會拷貝'"0'的,所以一般還有加一個(gè)語句:
                        *a='"0';
            
          三.使用技巧
                memset 可以方便的清空一個(gè)數(shù)據(jù)結(jié)構(gòu)的變量或數(shù)組.
                如:
                  struct sample_struct
                 {
                        char csName[16];
                        int iSeq;
                        int iType;
                 };
                 對于變量
                 struct sample_struct stTest;
                 一般情況下,初始化stTest的方法:
                  stTest.csName[0]='"0';
                  stTest.iSeq=0;
                  stTest.iType=0;
              而用memset:
                 memset(&stTest,0,sizeof(struct sample_struct));
              如果是數(shù)組:
              struct sample_struct TEST[100];
              memset(TEST,0,sizeof(struct sample_struct)*100);

          strcpy是拷貝字符串,以"0為標(biāo)志結(jié)束(即一旦遇到數(shù)據(jù)值為0的內(nèi)存地址拷貝過程即停止)
          strcpy的原型為
          char *strcpy(char *dest, const char *src)
          而memcpy是給定來源和目標(biāo)后,拷貝指定大小n的內(nèi)存數(shù)據(jù),而不管拷貝的內(nèi)容是什么(不僅限于字符)
          memcpy的原型為
          void *memcpy(void *dest, const void *src, size_t n);

          主站蜘蛛池模板: 西丰县| 上虞市| 应城市| 东兰县| 西峡县| 阜阳市| 施甸县| 凌海市| 宁乡县| 遵义市| 元朗区| 崇礼县| 汝南县| 河源市| 麻江县| 文水县| 海门市| 庐江县| 江源县| 仙桃市| 石首市| 苏尼特左旗| 田林县| 广南县| 谷城县| 喀喇沁旗| 乌拉特中旗| 东港市| 新乐市| 丰顺县| 汝阳县| 乌兰浩特市| 和田县| 淳化县| 霍山县| 永安市| 宜昌市| 岳阳市| 思南县| 玛多县| 武安市|