memset,memcpy,strcpy 的區別

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

  memcpy
  extern void *memcpy(void *dest,void *src,unsigned int count);
  #include <string.h>
   功能:由src所指內存區域複製count個字符串到dest所指內存區域.
   說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針.
  
   memset
   extern void *memset(void *buffer,int c,int count);
   #include <string.h>
   功能:把buffer所指內存區域的前count個字節設置成字符c
   說明:返回指向buffer的指針.

二.區別
    memset 用來對一段內存空間全部設置爲某個字符,一般用於在對定義的字符串初始化爲' '或者'/0';
    例: char a[100];
          memset(a,'/0',sizeof(a));
   
   memcpy 是用來做內存拷貝,可以用來拷貝任何數據類型的對象,可以指定拷貝的數據長度;
   例:
           char a[100],b[50];
           memcpy(b,a,sizeof(b));   //注意:如果使用sizeof(a),會造成內存溢出
           mem是一段內存,他的長度,必須自己記住.memcpy是見着什麼拷貝什麼。
   
    strcpy 就只能拷貝字符串,它遇到'/0'就結束拷貝;
      例:char a[100],b[50];
              strcpy(a,b);
              如用strcpy(b,a)要注意a中的字符串長度(第一個'/0'之前) 是否超過50,如果超過,則會造成b的
  內存溢出.它是不會拷貝'/0'的,所以一般還有加一個語句:
              *a='/0';
  
 三.使用技巧
      memset 可以方便的清空一個數據結構的變量或數組.
      如:
        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));
    如果是數組:
    struct sample_struct  TEST[100];
    memset(TEST,0,sizeof(struct sample_struct)*100);
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章