strcpy,sprintf,memcpy的區別
對於字符串拷貝來說,其實現的效率和使用的方便程度不同:
strcpy 無疑是最合適的選擇:效率高且調用方便。
snprintf 要額外指定格式符並且進行格式轉化,麻煩且效率不高。
memcpy 雖然高效,但是需要額外提供拷貝的內存長度這一參數,易錯且使用不便;並且如果長度指定過大的話(最優長度是源字符串長度 + 1),還會帶來性能的下降。其實 strcpy 函數一般是在內部調用 memcpy 函數或者用匯編直接實現的,以達到高效的目的。因此,使用 memcpy 和 strcpy 拷貝字符串在性能上應該沒有什麼大的差別。
對於非字符串類型的數據的複製來說,strcpy 和 snprintf 一般就無能爲力了,而memcpy 在此處比較適用
注意:
strcpy和memcpy功能上也有些差別:
比如:
const char *str1="abc/0def";
char str2[7];
首先用strcpy實現:
strcpy(str2,str1)
得到結果:str2="abc";也就是說,strcpy是以'/0'爲結束標誌的。
再用memcpy實現:
memset(str2,7);
memcpy(str2,str1,7);
得到結果:str2="abc/0def";
也就是說,memcpy是對內存區域的複製。當然,不僅能夠複製字符串數組,而且能夠複製整型數組等其他數組。