strcpy strncpy 區別
Strcpy和Strncpy的區別- -第一種情況:
char* p="how are you ?";
char name[20]="ABCDEFGHIJKLMNOPQRS";
strcpy(name,p); //name改變為"how are you ? OPQRS " ====>錯誤!
strncpy(name,p,sizeof(name)) //name改變為"how are you ? " ====>正確!
第二種情況:
char* p="how are you ?";
char name[20];
strcpy(name,p); //name改變為"how are you ? 未知字符 " ====>錯誤!
name[sizeof(name)-1]='\0' //和上一步組合,得到正確的結果!
strncpy(name,p,sizeof(name)); //name改變為"how are you ? " ====>正確!
第三種情況:
char* p="how are you ?";
char name[10];
strcpy(name,p); //name改變為"how are yo" ====>無結束符'\0',錯誤!
name[sizeof(name)-1]='\0' //和上一步組合,彌補結果。但要注意,字符傳遞錯誤!
strncpy(name,p,sizeof(name)); //和單純的一步strcpy結果一樣!
================================================
總結:strcpy
如果源長>目標長,則將源長中等于目標長的字符拷貝到目標字符串
如果源長<目標長,則源長全部拷貝到目標字符串,不包括'\0'
strncpy
如果目標長>指定長>源長,則將源長全部拷貝到目標長,自動加上'\0'
如果指定長<源長,則將源長中按指定長度拷貝到目標字符串,不包括'\0'
如果指定長>目標長,error happen
posted on 2007-07-22 02:20 旅途 閱讀(148) 評論(0) 編輯 收藏 引用 所屬分類: C/C++