2015-09-29 21 views
0

我想写一个函数来连接两个动态分配的C风格的字符串。我的设计是否正确,您首先必须将目标复制到temp char[],删除原始内存分配,获取两个char[]的长度,分配新的内存并将该新的内存复制到dest[]复制/连接动态分配的C风格字符串

所以伪代码:

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; 
} 

我是不是从根本上误解呢?

回答

0

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

+0

返回新分配的“目标”。 – seeplusplus

+0

在这种情况下,我会离开'dest'并分配一个全新的数组并返回一个指向它的指针。存在内存泄漏的可能性,但在这种情况下这不是问题。大小很容易计算,strlen(dest)+ strlen(source)+ 1.然后,您需要附加字符串而不是复制它们。但总的来说,你有正确的想法。 –

+0

太棒了!谢谢! – seeplusplus

0

如果源和目标重叠,则必须将其复制到临时缓冲区,但如果它们不重叠则不能。使用C char*,可能会发生这种情况,您可能会将mycat(str+2, str)作为测试用例。

0

CONCAT()的原型是:

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

所以, “目标” 的CONCAT()函数中的新的分配将不会在调用函数的体现。

两种可能的解决方案:

  1. 来电功能应该重新分配 “dest中” 用新的长度,然后,传递到CONCAT()。在这种情况下,concat()不会执行重新分配。

  2. 如果的concat()被允许进行重新分配,然后,它的原型应改为:

    一个)void concat(char** dest, char *source); - > strcat的/ strncat函数可以在此情况下可以使用由Jonathan莱弗勒

    所建议

    二)char* concat(char* dest, char *source); - >需要在我有我自己写的concat函数尽管这被传给两个动态分配cstyle串这种情况下