一、strcpy()函式:
函式原型:char * strcpy(char * str1,char * str2)
函式功能:將str2指向的字串複製到str1中去
返回值:返回str1
包含檔案:string.h
注意:strcpy()根據\0作為判斷結束,如果引數 str1 所指的記憶體空間不夠大,可能會造成緩衝溢位(buffer overflow)的錯誤情況,使用strncpy()或許更加安全。
strcpy()源**如下:
方法一:
int main()
str1[i] = '\0';
printf("%s \n",str1);
}方法二:借助下標
void my_strcpy(char *str1,char *str2)
str1[i] = '\0';
}void main()
執行結果:
方法三:不借助外力
void my_strcpy(char *str1,char *str2)
*str1 = '\0';
}void main()
執行結果如上。
方法四:改進方法二
void my_strcpy(char *str1,char *str2)
二、memcpy()函式
與strcpy()函式的區別:
strcpy()總是與字串是相對應的,該函式複製的內容為字串,然而字串在複製的時候通常使用該函式。該函式遇到字串的結束符\0即結束,容易導致溢位。
memcpy()可以複製任意的內容,比如:結構體、字元陣列、整型等,使用的物件型別廣泛,然而,除了字串以外的其他函式在複製時通常使用該函式,然而,其複製的長度根據第三個引數來決定。
函式原型:void *memncpy(void *di,void *si,int n)
memcpy()源**如下:
方法一:
int main()
;char p[10];
int size = sizeof(s);
int i = 0;
for( ;i < size;++i)
p[i] = '\0';
printf("%s \n",p);
}方法二:
void *my_memcpy(void *di,void *si,int size)
return di;
}void main()
;char ar[10];
my_memcpy(ar,buff,sizeof(buff));
printf("%s \n",ar);
}方法三:
void *my_memcpy(void *di,void *si,int size)
return di;
}void main()
;char ar[10];
my_memcpy(ar,buff,sizeof(buff));
printf("%s \n",ar);
}三、strncpy()
函式函式功能:複製字串,但是不限制複製的數量,可以選擇一段字元進行複製輸出。
函式原型:char *strncpy(char *di,char *si,size_t n).
這裡注意:
如果*si的字串長度<=*di的字串長度,
如果n>*si由於長度達到si nul,正常複製,但是,如果si中有null,strncpy複製到null即使沒到n也提前停止。如果n = *si串長度,與strcpy一致。注意n的選擇當n > *di串長度,di棧空間溢位產生崩潰異常。
如果*si
串長度》*di串長度
若n =*di串長度,則*di串沒有null字元,會導致輸出會有亂碼。如果不考慮*si串複製完整性,可以將*di 最後一字元置為null。
因此,一般情況下,使用strncpy時,建議將n置為*di串長度
strncpy()函式源**如下:
方法一:
void main()
p[i] = '\0';
printf("%s \n",p);
}方法二:使用下標
char *strncpy(char *di,char *si,int n)
di[i] = '\0';
return di;
}void main()
剩下的不使用下標,或者使用指標進行加減,等同前兩個複製函式相似,這裡不再給出詳細的**。
我是程式設計小白乙隻,初次涉獵程式設計,麻煩讀者多多指正不足之處。
c 類 建構函式 複製建構函式
複製建構函式是一種特殊的建構函式,它的作用是用乙個已經存在的物件去初始化另乙個物件。一般情況下不需要自行定義複製建構函式,系統預設提供乙個逐個複製成員值的複製建構函式。何時要使用呢?1.將新物件初始化為乙個同類物件 2.按值將物件傳遞給函式 3.函式按值返回物件 4.編譯器生成臨時物件 簡單的樣例如...
類與物件 複製建構函式
二進位制複製不複製指向的記憶體單元,這導致兩個 mystring 物件指向同乙個記憶體單元。函式 usemystring 返回時,變數 str 不再在作用域內,因此被銷毀。為此,將呼叫 mystring 類的析構函式,而該析構函式使用 delete釋放分配給 buffer 的記憶體,這將導致 mai...
類和物件 複製建構函式
形如x x x 或x x const x 二選一,後者能以常量物件作為引數 class complex complex c1 呼叫預設無參建構函式 complex c2 c1 呼叫預設的複製建構函式,將 c2 初始化成和c1一樣class complex complex const complex ...