Posted on 2009-08-28 10:49
Prayer 閱讀(1301)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C/C++
char * strncpy(char *s1,char *s2,size_t n);
將字符串s2中最多n個(gè)字符復(fù)制到字符數(shù)組s1中,返回指向s1的指針。
注意:如果源串長度大于n,則strncpy不復(fù)制最后的'\0'結(jié)束符,所以是不安全的,復(fù)制完后需要手動(dòng)添加字符串的結(jié)束符才行。
Strcpy和Strncpy的區(qū)別- -
第一種情況:
char* p="how are you ?";
char name[20]="ABCDEFGHIJKLMNOPQRS";
strcpy(name,p); //name改變?yōu)?how are you ? "====>正確!
strncpy(name,p,sizeof(name)); //name改變?yōu)?how are you ? " ====>正確!
第二種情況:
char* p="how are you ?";
char name[10];
strcpy(name,p); //目標(biāo)串長度小于源串,錯(cuò)誤!
name[sizeof(name)-1]='\0'; //和上一步組合,彌補(bǔ)結(jié)果,但是這種做法并不可取,因?yàn)樯弦徊匠鲥e(cuò)處理方式并不確定
strncpy(name,p,sizeof(name)); //源串長度大于指定拷貝的長度sizeof(name),注意在這種情況下不會(huì)自動(dòng)在目標(biāo)串后面加'\0'
name[sizeof(name)-1]='\0'; //和上一步組合,彌補(bǔ)結(jié)果
================================================
總結(jié):strcpy
源字串全部拷貝到目標(biāo)字串中,包括'\0',但是程序員必須保證目標(biāo)串長度足夠,且不與源串重疊。
strncpy
如果目標(biāo)長>=指定長>源長,則將源串全部拷貝到目標(biāo)串,連同'\0'
如果指定長<源長,則將截取源串中按指定長度拷貝到目標(biāo)字符串,不包括'\0'
如果指定長>目標(biāo)長,錯(cuò)誤!