2015-09-29 23 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串這種情況下