最多追加 n 字符,且保證結果以 '\0' 結尾,避免自我連接時找不到結束符。
char *my_strncat(char *dst, const char *src, size_t n) {
assert(dst && src);
char *ret = dst;
while (*dst) dst++; // 定位結束符
while (n-- && *src) *dst++ = *src++; // 追加最多 n 字符
*dst = '\0';
return ret;
}
int main() {
char buf[20] = "hello ";
size_t len = strlen(buf); // 6
my_strncat(buf, buf, len); // 追加自身前 6 字符
printf("%s\n", buf); // hello hello
return 0;
}
dst 結束符,再追加。n-- && *src 確保不越界且遇 '\0' 停止。'\0'。