從零手寫標準庫字符串函數,深入理解指針操作與字符串結構。
| 函數 | 標準庫對應 | 核心邏輯 |
|---|---|---|
fun1 | strlen | 迴圈計數至 \0 |
fun2 | strlen | 指針相減:end - start |
fun3 | strlen | 遞歸:1 + strlen(s+1) |
fun4 | strncat | 定位 dest 末尾,拷貝 n 字符 |
fun5 | strstr | 雙重迴圈匹配子串 |
fun6 | strstr | 優化版:外層遍歷 s1,內層匹配 s2 |
fun7 | strcpy | while(*d++ = *s++); 一行實現 |
fun8 | strcmp | 逐字符比較,差值即結果 |
fun9 | memcpy | 逐字節拷貝,不處理重疊 |
fun10 | memmove | 處理重疊:向前/向後拷貝 |
// strcpy
char *strcpy(char *d, const char *s) {
char *ret = d;
while (*d++ = *s++);
return ret;
}
// strcmp
int strcmp(const char *s1, const char *s2) {
while (*s1 == *s2) {
if (*s1 == '\0') return 0;
s1++; s2++;
}
return *s1 - *s2;
}
memcpy 與 memmove 的重疊處理差異。const 正確性:源字符串不應被修改。