關於幾個常見函式
strcpy,strncpy,memcpy,memmove;
那麼現在開始乙個乙個實現吧!
#include#include#include#include#define max 20
/*關於指標傳參時的斷言和const修飾的習慣有必要養成
比較常用的就是strcpy了;
需要注意的是dest必須有足夠的空間可以拷貝src中的字串;*/
char* my_strcpy(char *dest,const char *src)
return ret;
}
/*關於strcpy的缺陷大家應該有所了解,就是strcpy不會對越界進行檢查;
在strncpy中我會把這個缺陷彌補;
num為終止的引數;*/
>strncpy:
char* my_strncpy(char* dest,const char *src,int num)
if(*src!='\0')//當不完全拷貝時賦予dest字串結束的標誌;
*dest = '\0';
return dest;
}
strcpy 和 strncpy的區別僅僅是拷貝限制引數的區別
/*關於memcpy和memmove要詳細說明一下:
1.memcpy是把src 指向的物件中的n個字元拷貝
到dest 所指向的物件,返回指向結果物件的指標;
2.memmove 和 memcpy 函式在src和dest所指向內容不重疊是是一樣的;區別就在於
memmove可以把自己的一部分拷貝到自己的的另一部分。
3.共同點就是都是對記憶體的的拷貝,對其安全性不必做太多的考慮;
所以拷貝 '/0',null;都可以進行拷貝,對型別沒有要求;
都是以 n 為結束標誌並不是'/0';所以拷貝字串時慎用!*/
//這裡用void* 來定義引數,用 char* 強制轉換,實現一次讀乙個位元組;
//直接上**更暴力點!
>memcpy:
void* mymemcpy(void* dest,void*src,int num)//需要注意num不同情況的取值
return dest;
}
>memmove:memmove 考慮了兩個位址是否有重疊
舉個例子: dest指向"abcdef"的開始,src指向第三個字元'c',
要從src拷貝4個字元到dest中,如果正序拷貝勢必會把src的內容
修改,所以memmove提供倒序拷貝!
void* mymemmove(void* dest,void*src,int num)
}//如果位址沒有重合其實和memcpy是一樣的;
else }
return dest;
}int main()
到這裡就結束了,請大家指出不對的地方和可以優化的地方,我會多加改正!
謝謝!
字串拷貝和記憶體拷貝函式
strcpy 拷貝字串 定義函式 char strcpy char dest,const char src strcpy 函式只能拷貝字串。strcpy 函式將源字串src的每個位元組拷貝到目的字串dest中,src字串末尾的 0 也被拷貝過去。strcpy 函式返回引數dest的起始位址。如果引數...
記憶體拷貝函式 void memcpy
函式原型 void memcpy void dest,void src,int n 返回值 該函式返回乙個指向目標儲存區destin的指標。所需標頭檔案 c include cstring 應用說明 按照位元組 byte 拷貝實現的my memcpy void my memcpy void dst,...
C C 記憶體拷貝函式
1 char strcpy char dest,const char src 對字串有效,也會將src字串的 0 拷貝至目的字串中,所以在設定目的字串時注意分配合理的記憶體空間 2 char strncpy char dest,const char src,size t count 對字串有效,根據...