使用memcpy连接两个字符串

时间:2018-05-26 13:02:44

标签: c

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

char *concat(char *str1, char *str2) {
    memcpy(str1 + strlen(str1) - 1, str2, strlen(str2) + 1);
    return str1;
}

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

3 个答案:

答案 0 :(得分:3)

您必须确保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;
}

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

答案 1 :(得分:1)

您的函数以简单直接的方式实现strcat并具有相同的限制,但它有一个错误:您在str2内的字符串结尾之后复制str1的内容{1}}。删除+ 1的第一个参数中的memcpy。请注意,您可以将str2设为const char *,因为您没有修改它所指向的数组的内容。

char *concat(char *str1, const char *str2) {
    memcpy(str1 + strlen(str1), str2, strlen(str2) + 1);
    return str1;
}

如果目标数组是字符串文字,则无法使用此方法,因为尝试修改字符串文字具有未定义的行为。您应该首先将字符串文字复制到一个足够大的数组中,以容纳字符串和空终止符。

答案 2 :(得分:0)

您可以尝试以下方法:

app.session_cookie_name