strcpy,即string copy(字元串複製)的縮寫。
strcpy是一種C語言的標準庫函式,strcpy把含有'\0'結束符的字元串複製到另一個地址空間,返回值的類型為char*。
基本介紹
- 中文名:字元串複製函式
- 外文名:strcpy
- 功能:字元串複製
- 頭檔案:string.h
- 返回值類型:char*
C語言函式
舉例
char a[10],b[]={"COPY"};//定義字元數組a,bstrcpy(a,b);//將b中的COPY複製到a中
典型實現
////C語言標準庫函式strcpy的一種典型的工業級的最簡實現。//返回值:目標串的地址。//對於出現異常的情況ANSI-C99標準並未定義,故由實現者決定返回值,通常為NULL。//參數:des為目標字元串,source為原字元串。char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) && (source != NULL)); while((*r++ = *source++)!='\0'); return des; } //while((*des++=*source++));的解釋:賦值表達式返回左運算元,所以在賦值'\0'後,循環停止。
套用實例
⒈strcpy的實現代碼char * strcpy(char * strDest,const char * strSrc) {if ((NULL==strDest) || (NULL==strSrc)) //[1]throw "Invalid argument(s)"; //[2]char * strDestCopy = strDest; //[3]while ((*strDest++=*strSrc++)!='\0'); //[4]return strDestCopy;}
while( 1 ){ char temp; *strDestCopy = *strSrc; temp = *strSrc; strDestCopy++; strSrc++; if( '\0' == temp ) break;}
while ( *strSrc != '\0' ){ *strDestCopy = *strSrc; strDestCopy++; strSrc++;}*strDestCopy = *strSrc++; 也即:while ( *strSrc != '\0' ){ *strDestCopy++ = *strSrc++;}*strDestCopy=‘\0’;
#include<iostream>#include<stdlib.h>using namespace std;char * strcpy( char * strDest, const char * strSrc ){ char * strDestCopy = strDest; if ((NULL==strDest)||(NULL==strSrc))throw "Invalid argument"; while ( (*strDest++=*strSrc++) != '\0' ); return strDestCopy;} int main( int argc, char * argv[] ){ char a[20], c[] = "i am teacher!"; try{ strcpy(a,c); } catch(char* strInfo) { cout << strInfo << endl; exit(-1); } cout << a << endl; return 0;}
#include<iostream>using namespace std;char *strcpy(char *strDes, const char *strSrc);//函式聲明int main(){ const char *strSrc="helloworld"; char *strDes=NULL; strDes=strcpy(strDes,strSrc); cout<<"strSrc="<<strSrc<<endl; cout<<"strDes="<<strDes<<endl; if(strDes!=NULL) { free(strDes); strDes=NULL; } return 0;}char *strcpy(char *strDes, const char *strSrc){ assert(strSrc!=NULL); //若strSrc為NULL,則拋出異常。 strDes=(char *)malloc(strlen(strSrc)+1); //多一個空間用來存儲字元串結束符'\0' char *p=strDes; while(*strSrc!='\0') { *p++=*strSrc++; } *p='\0'; return strDes;}
還有一種模擬算法:char * strcpy(char *dest ,const char *src){ char *p=dest; while (*src != '\0') { *dest = *src; dest++;src++; } *dest = '\0'; return p;}
char* p="how are you ?"; char name[20]="ABCDEFGHIJKLMNOPQRS"; strcpy(name,p); //name改變為"how are you ? "====>正確! strncpy(name,p, sizeof(name)); //name改變為"how are you ?" =====>正確!後續的字元將置為NULL
char* p="how are you ?"; char name[10]; strcpy(name,p); //目標串長度小於源串,錯誤! name[sizeof(name)-1]='\0'; //和上一步組合,彌補結果,但是這種做法並不可取,因為上一步出錯處理方式並不確定 strncpy(name,p,sizeof(name)); //源串長度大於指定拷貝的長度sizeof(name),注意在這種情況下不會自動在目標串後面加'\0' name[sizeof(name)-1]='\0'; //和上一步組合,彌補結果