strcpy和memcpy都是標準c庫函數,它們的特點:
strcpy提供了字符串的複製,strcpy只用於字符串的複製,不僅複製字符串內容外,還會複製字符串的結束符。
strcpy的函數原型是: char* strcpy(char* dest, const char* src);
memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字符到目標dest所指的
內存地址的起始位置。
memcpy只提供一般的內存複製,即memcpy對於需要複製的內容沒有限制,因此用途更廣。
函數原型是:void *memcpy(void *dest,const char* src, size_t count);
strcpy和memcpy主要有以下三點區別:
1.複製的內容不同,strcpy只能複製字符串,而memcpy可以複製任意內容,例如字符串,整型,結構體,類等。
2.複製的方法不同。strcpy不需要指定長度,它遇到被複制字符串的結束符'\0'才結束,所以容易溢出。
memcpy則是根據第三個參數決定複製的長度。
3.用途不同,通常在複製字符串時使用strcpy,而複製其他類型的數據是memcpy。
memcpy和memmove都是C語言中的庫函數,在庫函數string.h中,其原型很相似,它們都是從src所指向的
內存中複製cnt個字符到dest所指向的內存中,並返回dest的值。
當源內存區域和目標內存區域無交叉重疊時,兩者的結果是一樣的,但是如果有交叉呢?
memcpy是從src的起始部分開始複製,所以雖然第一種情況下沒有問題,但是如果遇到第二種情況,
則會發生錯誤,交叉部分的src內容就會被覆蓋掉了。
而memmove則由於採用不同的複製機制,所以可以正確處理第二種情況。
assert宏的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程序執行。