>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型的資料,是乙個測試字串長度的函式。這是自...