程式設計使用memcpy(a, b, num)出現斷言,後研究發現memecpy()函式在使用時要求a,b引數不為null,後進行修改,問題解決。
1.判斷輸入指標是否為null。(長度可判可不判,因為長度如果<0,後面**也能處理)
2.考慮記憶體是否重疊問題。
記憶體是否重疊問題,即當dst是src的後半部分時,對dst的copy會導致原src後半部分被覆蓋,後續的拷貝會出錯。(其實linux低下memcpy本身是不處理這種情況的,memmove函式才會考慮記憶體重疊問題,所以用memcpy函式時,安全性要程式設計師來保證,參考
記憶體重疊需倒序拷貝。
3.高效性。32位匯流排可以每次複製乙個int,64位匯流排可以一次性複製long long。所以要分成int和char型別來處理,優先int型處理方式。不過要注意,倒序拷貝時,減1必須轉化為int型別後減1,*(int*)dst = *(int *)src填充的才是最後乙個int。
參考:1.
2.
C語言memcpy函式的用法
memcpy是memory copy的縮寫,意為記憶體複製,在寫c語言程式的時候,我們常常會用到它。它的函原型如下 void memcpy void dest,const void src,size t n 它的功能是從src的開始位置拷貝n個位元組的資料到dest。如果dest存在資料,將會被覆蓋...
C語言memcpy函式的用法
memcpy是memory copy的縮寫,意為記憶體複製,在寫c語言程式的時候,我們常常會用到它。它的函原型如下 void memcpy void dest,const void src,size t n 它的功能是從src的開始位置拷貝n個位元組的資料到dest。如果dest存在資料,將會被覆蓋...
C語言中的memcpy與strcpy函式使用
今天給大家介紹一下c語言中的memcpy與strcpy函式使用。首先,這兩個函式都是包含在string.h的標頭檔案中的,因此使用前需要包含標頭檔案string.h。strcpy主要是用於字串的拷貝。函式原型 char strcpy char destination,const char sourc...