手寫 strcat 核心邏輯
#include
void link(char *s, char *t) {
while (*s != '\0') s++; // 移至 s 末尾
while (*t != '\0') *s++ = *t++; // 逐字符拷貝 t 到 s 尾部
*s = '\0'; // 添加結束符
}
int main() {
char p[128] = "123"; // 足夠大的緩衝區
char *q = "456"; // 字符串常量(只讀)
link(p, q);
printf("連接後: %s\n", p); // 輸出 123456
return 0;
}
關鍵點
- 目標緩衝區必須足夠大(此處
p[128]),否則緩衝區溢出。
q 為字符串常量指標,不可修改;p 為數組,可修改。
- 雙重
while 循環分別完成「找尾」與「拷貝」。
- 標準庫
strcat / strncat 同理,但含長度檢查更安全。
安全增強版
void link_safe(char *dest, size_t dest_size, const char *src) {
char *end = dest;
while (*end && (end - dest) < dest_size - 1) end++;
while (*src && (end - dest) < dest_size - 1) *end++ = *src++;
*end = '\0';
}