Posted on 2009-08-28 10:49
Prayer 閱讀(1290)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++
char * strncpy(char *s1,char *s2,size_t n);
將字符串s2中最多n個字符復制到字符數組s1中,返回指向s1的指針。
注意:如果源串長度大于n,則strncpy不復制最后的'\0'結束符,所以是不安全的,復制完后需要手動添加字符串的結束符才行。
Strcpy和Strncpy的區別- -
第一種情況:
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 ? " ====>正確!
第二種情況:
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'; //和上一步組合,彌補結果
================================================
總結:strcpy
源字串全部拷貝到目標字串中,包括'\0',但是程序員必須保證目標串長度足夠,且不與源串重疊。
strncpy
如果目標長>=指定長>源長,則將源串全部拷貝到目標串,連同'\0'
如果指定長<源長,則將截取源串中按指定長度拷貝到目標字符串,不包括'\0'
如果指定長>目標長,錯誤!