下面我主要說說memcpy、strcpy、string::copy這三種
內存拷貝memcpy
陷阱
內存拷貝不會對字符串結束符’\0’進行檢查
結果
拷貝結束後,在字符串末尾會出現亂碼。
解決方案
申請內存時多申請一個字節內存,以保證將字符串結束符拷貝進去。
字符串拷貝strcpy
strcpy是專用於字符串拷貝的函數,與memcpy的區別就是,它會檢測結束符’\0’,所以在申請內存時不用做多餘申請。
語法/原型:
char* strcpy(char* strDestination, const char* strSource);
參數說明:
strDestination:目的字符串。
strSource:源字符串。
strcpy() 會把 strSource 指向的字符串複製到 strDestination。
必須保證 strDestination 足夠大,能夠容納下 strSource,否則會導致溢出錯誤。
string方法拷貝string::copy
陷阱&結果
因爲這裏copy最終調用的函數仍然是memcopy,所以陷阱一樣,拷貝完成後,會在字符串後面帶上一串亂碼
解決方案
在拷貝結束後,加上結束符’\0’。