Copy/concatenate 动态分配的 C 风格字符串

Copy/concatenate dynamically allocated C style strings

我正在尝试编写一个函数来连接两个动态分配的 C 风格字符串。我的设计是否正确,您首先必须将目标复制到临时 char[],删除原始内存分配,获取两个 char[] 的长度,然后使用该新长度分配新内存将字符复制到 dest[]?

所以伪代码:

void concat(char* dest, char *source)
{
    char temp = dest;

    delete [] dest;

    char dest = new char [new size];

    copy temp to dest;

    copy source to dest;
}

我是不是从根本上误解了这一点?

不要删除 dest,因为它可能指向非动态内存。然后使用 strcat 或更安全的 strncat.

如果源和目标重叠,则必须复制到临时缓冲区,否则则不需要。使用 C char*,这可能会发生,您可能会得到 mycat(str+2, str) 作为测试用例。

您的 concat() 原型 是:

void concat(char* dest, char *source);

因此,在 concat() 函数中新分配的 "dest" 不会反映在调用函数中。

两种可能的解决方案:

  1. 调用函数应该重新分配 "dest" 新的长度,然后传递给 concat()。在这种情况下,concat() 不会执行重新分配。

  2. 如果允许concat()进行再分配,那么它的原型应该改为:

    a) void concat(char** dest, char *source); -> strcat/strncat 可以按照 Jonathan Leffler

    的建议在这种情况下使用

    b) char* concat(char* dest, char *source); -> 需要 return 新分配 "dest" 在这种情况下