模擬實現C語言字串系列和memory系列庫函式

2021-08-04 19:01:49 字數 1621 閱讀 1061

string系列庫函式

strcpy:對字串的拷貝

char* my_strcpy(char* dst,const char* src)

//while (*src != 0)

// //*dst = 0; //該目標字串最後放入0結束

return ret;

}

strncpy:對strcpy的變形,即拷貝字串的前n個字元

char* my_strncpy(char* dst, const char* src,int n)

*dst = 0;

return ret;

}

strcmp:比較兩字串,相等返回0,str1>str2返回正數,str1

int my_strcmp(char* str1, char* str2)

return *str1 - *str2;

}

strncmp:在strcmp的基礎上只比較n個字元

int my_strncmp(char* str1, char* str2, size_t n)

return *str1 - *str2;

}

strcat:將str2追加至str1字串

char* my_strcat(char* dst,const char* src)

while (*dst++ = *src++) //\0已經從src拷貝至dst,不用額外加

{} return ret;

}

strncat:將str2的前n個字元追加至str1

char* my_strncat(char* dst, const char* src,size_t n)

while ((*dst++ = *src++) && --n)

{} *dst = 0;

return ret;

}

memory系列函式

void* my_memcpy(void* dst,const void* src,size_t n)

return ret;

}

memmove:與memcpy功能基本一致,若dst和src記憶體位址有重疊,memmove能夠保證在覆蓋之前將重疊區域複製到目標位置,但最終src會被修改。如沒有記憶體重疊,則和memcpy作用一致。

如何解決記憶體重疊問題?

1、若dst<=src  或者  dst>=src+n時,按順序拷貝

2、若dst>src  且  dst= (char*)src + n)) //順序複製 }

else //逆序複製 }

return ret;

}問:strcpy、memcpy、memmove的區別?

strcpy:  

只能複製字串

memcpy:

可以複製任意型別,但記憶體重疊時不保證結果的正確性

memmove:

在記憶體覆蓋時,保證結果是我們需要的結果,但會修改src的內容,若無記憶體重疊則和memcpy作用一致

c語言 模擬實現字串函式

1.strcpy實現字串的拷貝 char my strcpy char dest,const char src return temp 2.strcat實現字串的連線 char my strcat char arr,const char src while arr src return temp 3...

字串模擬實現

1.三種方式模擬實現strlen函式。方法1 用計數器模擬實現 define crt secure no warnings include include include include int mystrlen char str return ret int main printf 請輸入字串 n...

C語言模擬實現字串操作函式

在編寫程式過程中,我們經常使用到一些字串函式,例如求字串長度,拷貝字串 這些函式都在c標準庫中存在,我們可以直接使用。但我們還需要掌握這些函式的實現方法,今天來看看一些常用的字串操作函式的實現方法 1.strlen strlen是用來求字串長度的函式,字串長度就是字串中包含的字元的個數,但是不包含字...