cout << strcat(...)strcat 標準庫返回 char*(目的指標),以支援鏈式調用。自寫版本需同樣返回 char*。
strcat 參考實現char* my_strcat(char* dest, const char* src) {
char* ret = dest; // 保存起始位址供返回
while (*dest) dest++; // 移至 dest 結尾 '\0'
while ((*dest++ = *src++)) ; // 複製 src 含 '\0'
return ret; // 鏈式調用關鍵
}
strlen 與 strcmp 實現size_t my_strlen(const char* s) {
size_t len = 0;
while (s[len]) len++;
return len;
}
int my_strcmp(const char* s1, const char* s2) {
while (*s1 && (*s1 == *s2)) { s1++; s2++; }
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}
char s1[100] = "Hello";
char s2[] = "World";
cout << my_strcat(s1, s2) << ' ' << my_strlen(my_strcat(s1, s2)) << endl;
// 輸出:HelloWorld 10
cout << my_strcmp("abc", "abd") << endl; // 負值
cout << my_strcmp("abc", "abc") << endl; // 0
strcat 返回 char*,不可聲明為 void。strlen 返回 size_t(無號),格式化輸出用 %zu 或 cout。strcmp 返回 int(負/0/正),直接 cout 即可。dest 容量 ≥ 原長度 + src 長度 + 1),否則緩衝區溢出。手寫標準庫函數是理解指標、記憶體佈局、返回值約定的絕佳練習。