使用 memcpy 连接两个字符串

Hel*_*bye 1 c

我正在尝试创建一个连接两个字符串而不在 C 中使用strncat/的函数strcat。我有这个,但它给出了段错误。我究竟做错了什么?

char *concat(char *str1, char *str2) {
    memcpy(str1 + strlen(str1) - 1, str2, strlen(str2) + 1);
    return str1;
}
Run Code Online (Sandbox Code Playgroud)

这不是家庭作业。它适用于 TI-84 Plus CE 的 C 工具链,strncat在此功能中对我不起作用。str1将是一个字符串文字。str2将是可变的。

Mic*_*eer 5

您必须确保str1指向一个足够大的内存位置以接收整个结果:

char *concat(char const*str1, char const*str2) {
   size_t const l1 = strlen(str1) ;
   size_t const l2 = strlen(str2) ;

    char* result = malloc(l1 + l2 + 1);
    if(!result) return result;
    memcpy(result, str1, l1) ;
    memcpy(result + l1, str2, l2 + 1);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

此外,您应该尽可能多地添加错误检查,至少有一些assert(str1) ; assert(str2) ;......