寫乙個函式,完成記憶體之間的拷貝。[考慮問題是否全面,是否考慮記憶體重疊問題]
返回void *支援鏈式操作,引數型別是void *以支援任意型別的指標,輸入引數加上const修飾,最好加上assert對輸入輸出指標進行非null判斷
void* memcpy( void *dest, const void *src, size_t count )
char* pdest = static_cast( dest );
const char* psrc = static_cast( src );
// 依次從前拷貝,目的位址覆蓋了源位址的數,此時從後往前拷貝
if( (pdest>psrc) && (pdest<(psrc+count))) //能考慮到這種情況就行了
for( size_t i=count-1; i!=-1; --i )
pdest[i] = psrc[i];
else
for( size_t i=0; ipdest[i] = psrc[i];
return dest;
int main( void )
char str = "0123456789";
memcpy( str+1, str+0, 9 );
cout << str << endl;
memcpy( str, str+5, 5 );
cout << str << endl;
system( "pause" );
return 0;
// 0012345678
// 4567845678
strcmp():
int ******_strcmp (const char *s1, const char *s2)
{ int ret;
while ((ret = *(unsigned char *) s1 - *(unsigned char *) s2++) == 0
&& *s1++);
return ret;
memcmp():
int ******_memcmp (const char *s1, const char *s2, size_t n)
{ int ret = 0;
while (n--&& (ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) == 0);
return ret;
strcmp只判斷s1的『/0』,沒有長度的控制;memcmp有長度引數n的控制
memcpy():
char *******_memcpy (char *dst, const char *src, size_t n)
{ char *ret = dst;
while (n--)
*dst++ = *src++;
return ret;
直接的記憶體之間的copy,不處理記憶體重疊的情況。
strcpy():
char *******_strcpy (char *dst, const char *src)
{ char *ret = dst;
while ((*dst++ = *src++) != '/0'); //相當簡約,一句話即搞定
return ret;
與memcpy區別就是對'/0'作為結束符
strncpy():
char *******_strncpy (char *dst, const char *src, size_t n)
char *ret = dst;
while (n--)
if ((*dst++ = *src++) == '/0')
while (n--)
*dst++ = '/0';
return ret;
return ret;
n和『/0'都作為結束的控制符。如果n過大,則後面全補'/0
幾個典型的記憶體拷貝及字串函式實現
幾個典型的記憶體拷貝及字串函式實現 寫乙個函式,完成記憶體之間的拷貝。考慮問題是否全面,是否考慮記憶體重疊問題 返回void 支援鏈式操作,引數型別是void 以支援任意型別的指標,輸入引數加上const修飾,最好加上assert對輸入輸出指標進行非null判斷 void memcpy void d...
字串拷貝和記憶體拷貝函式
strcpy 拷貝字串 定義函式 char strcpy char dest,const char src strcpy 函式只能拷貝字串。strcpy 函式將源字串src的每個位元組拷貝到目的字串dest中,src字串末尾的 0 也被拷貝過去。strcpy 函式返回引數dest的起始位址。如果引數...
字串拷貝函式
1.strcpy函式 顧名思義字串複製函式 一般函式原型實現方式 該函式的引數是字元指標,也就是可以是字串變數和字元陣列,因為它們的變數名代表首字元位址。字串預設有乙個null結束符,字元陣列沒有。所以此處需要注意 因為src要求有null結束符,所以字元陣列的長度必須大於等於src包含null結束...