我正在尝试创建一个函数来连接两个字符串,而不使用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
将是变量。
答案 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