C語言中memcpy()、strcpy()和memset()函數

1.memcpy()函數

函數原型:void *memcpy(void*dest, const void *src, size_t n);

功能:從源src所指的內存地址的起始位置開始,拷貝n個字節的數據到目標dest所指的內存地址的起始位置中。

說明:

1)src和dest所指內存區域不能重疊,函數返回指向dest的指針。如果src和dest以任何形式出現了重疊,它的結果是未定義的。

2)與strcpy相比,memcpy遇到’\0’不結束,而且一定會複製完n個字節。只要保證src開始有n字節的有效數據,dest開始有n字節內存空間就行。

3)如果目標數組本身已有數據,執行memcpy之後,將覆蓋原有數據(最多覆蓋n個)。

如果要追加數據,則每次執行memcpy()後,要將目標地址增加到要追加數據的地址。

4)source和destin都不一定是數組,任意的可讀寫的空間均可。

程序例子:

  例1:將s中的字符串複製到字符數組d中

  //memcpy.c

  #include<stdio.h>

  #include<string.h>

  intmain()

  {

  char*s="Golden Global View";

  chard[20];

  clrscr();

  memcpy(d,s,strlen(s));

  d[strlen(s)]='\0';//因爲從d[0]開始複製,總長度爲strlen(s),d[strlen(s)]置爲結束符

  printf("%s",d);

  getchar();

  return0;

  }

  輸出結果:GoldenGlobal View

 

      例2:將s中第14個字符開始的4個連續字符複製到d中。(從0開始)

  #include<string.h>

  intmain()

  {

  char*s="Golden Global View";

  chard[20];

  memcpy(d,s+14,4);//從第14個字符(V)開始複製,連續複製4個字符(View)

  //memcpy(d,s+14*sizeof(char),4*sizeof(char));也可

  d[4]='\0';

  printf("%s",d);

  getchar();

  return0;

  }

  輸出結果: View
 

  例3:複製後覆蓋原有部分數據

  #include<stdio.h>

  #include<string.h>

  intmain(void)

  {

  charsrc[] = "******************************";

  chardest[] = "abcdefghijlkmnopqrstuvwxyz0123as6";

  printf("destinationbefore memcpy: %s\n", dest);

  memcpy(dest,src, strlen(src));

  printf("destinationafter memcpy: %s\n", dest);

  return0;

  }

  輸出結果:

  destinationbefore memcpy:abcdefghijlkmnopqrstuvwxyz0123as6

  destinationafter memcpy: ******************************as6

2.strcpy()函數

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

Strcpy  就只能拷貝字符串了,它遇到'/0'就結束拷貝

3. memset()函數

       原型是extern void *memset(void *buffer, int c, int count)       

       說明:buffer:爲指針或是數組,c:是賦給buffer的值, count:是buffer的長度.

       這個函數在socket中多用於清空數組.如:原型是memset(buffer, 0, sizeof(buffer))


原文:https://blog.csdn.net/tigerjibo/article/details/6841531 
原文:https://blog.csdn.net/xiaominkong123/article/details/51733528 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章