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