用C語言模擬實現str和mem相關函式

2021-08-20 01:28:45 字數 2890 閱讀 6592

>str開頭的函式只能用於字元資料的操作,遇到null'\0'會停止。

>mem開頭的函式用於操作記憶體內容,可以處理null.操作的基本單位是位元組操作

1.str和mem對比例項:

例如:strcpy和memcpy操作:

>模擬strcpy:

#include#include#includechar *my_strcpy(char *dest, const char *str)

return dest;

}int main ()

>模擬memcpy:

方法一:通過ascll碼表的位置,進行字元的差運算。

#include#includevoid my_memcpy(void *str1,const void *str2,size_t size)

}int main()

這裡會出現記憶體重疊問題,比如上例中本來的預期結果是:aabcefgh可是執行結果為:aaaaefgh。

對於memcpy總結下面四種出現的情況:以字串為例。

void my_memcpy(void *dest,const void *src,size_t size)//src要拷貝的字串,dest目的字串

在上面四種情況中:(1),(2),(3)拷貝的時候從前往後拷,不會出現覆蓋問題。(4)情況拷貝的時候必須從後往前拷,如果從前往後會出現從開始的那個字元其,到要拷貝的長度這段字串會一直被覆蓋。

下面是針對第四種情況:

#include#includevoid my_memcpy(void *dest,const void *src,size_t size)

} else }}

int main()

那麼執行結果就是:aabcdefgh。

總結strcpy和memcpy的區別:

1、複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

2、複製的方法不同。strcpy不需要指定長度,它遇到被複製字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。

3、用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy

2.模擬實現strlen:

>直接用計數器實現:

#include#includeint my_strlen(const char *str)

return count;

}int main()

>不建立臨時變數的計數器:通過遞迴

#include#includeint my_strlen(const char *str)

else

return 1 + my_strlen(str + 1);

}int main()

>指標-指標:

#include#includeint my_strlen(const char *str)

return p - str;

}int main()

int main()

3.模擬實現strcat:

思路:先使被拼接的字串(dest)指向'\0',然後將要拼接的字串(str)依次拷貝到dest後

#include#include#includechar *my_strcat(char *dest, const char *str)

while (*dest = *str)

return ret;

}int main()

4.模擬實現strstr:

思路:在str1中查詢str2並返回,str1中str2所在字串之後的所有字串。定義乙個指標變數s指向str1,然後s與str2中的字元進行比較,如果一直比較到'\0'那麼就返回str1,如果比較遇到不相等,則s指向str1的第二個字元重新開始比較。

#include#include#includechar *my_strstr(char *str1, const char *str2)

if (*q == '\0')

return p;

p++;

} return 0;

}int main()

執行結果:defg

5.模擬實現strcmp:

思路:通過字元在ascll表中的位置序號進行差運算比較。

比較的是ascll中的位置:如abcg小於abcz

#include#includeint my_strcmp(const char *str1,const char *str2)

if (ret > 0)

ret = 1;

else if (ret<0)

ret = -1;

return (ret);

}int main()

6.模擬實現strchr:

strchr:查詢字串中首次出現字元c的位置。如果字元出現多次,以第一次找到的位置為主

#include#include#includechar *my_strchr(const char*str, int c)

str++;

} return 0;

}int main()

模擬實現str系列和mem系列庫函式

1.實現strcpy 拷貝字串 char my strcpy char dest,const char src return ret 注意 strcpy會將 0也拷貝,但是需要注意目標位址有足夠的空間進行拷貝。2.實現strcat 字串追加。strcat也會把src的 0拷貝到末尾,需要保證空間足夠...

Mem庫函式模擬實現

本篇檢視 1 memset 2 memcpy 3 memmove 4 memcmp 5 memchr memset 功能 將一段記憶體初始化為某個值 函式拷貝ch 到buffer 從頭開始的count 個字元裡,並返回buffer指標。函式原型 void memset void buffer,int...

模擬實現str函式

字串是乙個重要的資料型別,但是c語言並沒有顯式的字串資料型別,因為字串以字元常量的形式儲存在字元陣列之中。接下來我將要模擬實現處理字串的庫函式 strlen,syrcpy,strcat,strstr,strcmp,memcpy。1 strlen返回乙個int型的資料,是乙個測試字串長度的函式。這是自...