这是我将如何处理它,使用现有的字符串命令而不是 memcpy。我假设你想要像 strcat 这样不影响源字符串的东西。
char* string_concat(char *dest, const char* string1, const char* string2)
{
strcpy(dest, string1);
strcat(dest, string2);
return dest;
}
要使用它,您需要传入一个指向要存储结果的缓冲区的指针。您可以使用 malloc 将其设置为所需的大小。完成后释放它。
char *str1 = "abc";
char *str2 = "def";
size_t len = strlen(str1) + strlen(str2);
char *newstr = malloc(len + 1);
string_concat(newstr, str1, str2);
printf("%s\n", newstr);
free(newstr);
在不分配内存的情况下根本无法处理任意长度的字符串,因此除非您使用具有固定长度的字符数组,否则您将无法使用 malloc/free。如果您想抽象决定分配多少缓冲区的逻辑,您可以执行以下操作:
size_t string_concat(char* dest, char* string1, char* string2)
{
if(!dest)
{
return strlen(string1) + strlen(string2) + 1;
}
strcpy(dest, string1);
strcat(dest, string2);
return 0;
}
然后你可以像这样询问它分配多少:
char* newstr = malloc(string_concat(0, str1, str2));
但是你失去了它返回一个指向 dest 的指针的语法便利。