2011-06-30 29 views
0
#include <iostream> 
#include <cstring> 
using namespace std; 
int main() { 
    char sor[6] = "hello"; 
    char des[6] = "hello"; 
    strcat(des,sor); 
    cout << des; 
} 

當我啓動該程序的調試它與控制檯輸出(背後)一起提供了以下錯誤: enter image description here這有什麼不對的程序

爲什麼會這樣呢?如果代碼有問題,請給出建議

+1

嘗試在使用應該大於或等於11的數組之前分配大內存。希望這有助於 – asma

+0

這聽起來像一個家庭作業問題。是嗎? –

+3

使用'std :: string'。 –

回答

4

雖然增加了字符串的大小在這種情況下char-array會幫助你,讓我建議實際使用C++特性;當你想編寫C++不編碼C:

#include <iostream> 
#include <string> 
using namespace std; 
int main() { 
    string sor = "hello"; 
    string des = "hello"; 
    des += sor; 
    cout << des; 
} 

爲什麼不字符數組

Suhail問爲什麼char型數組不好:

人不應該使用炭火的陣列,因爲被像這樣的情況。存在更多危險的情況;有效地,當您使用C數組時,您的程序受到緩衝區溢出攻擊是有一定危險的。

你真的很幸運,你直接收到異常;但更多的時候比你喜歡的這些錯誤是微妙的,不會在幾天,幾個月,幾年中發現自己;然後,可能您的客戶將在每日新聞中被破解並將其客戶的信用卡信息遺失給公衆。

使用C++工具如stringstringstream,可以很容易地避免這種情況。


+0

同意phresnel ... – asma

4

Des不足以保存連接後的結果。你應該增加數組的大小。

+0

不,他不應該使用char數組。 –

+0

哦..那是一個很大的錯誤 –

+0

@ phresnel爲什麼我不應該使用char數組? –

1

des僅具有空間6個字節和你正在試圖適應11個字節5 + 5 + 1在它:

'h'+'e'+'l'+'l'+'o'+'h'+'e'+'l'+'l'+'o'+'\0' 

這導致破壞堆(因爲DES是一個自動可變的),這是cout工作的原因,但儘快返回程序就會崩潰。 它可以工作,如果你聲明des[11]

0

嘗試在使用數組之前分配內存。希望這有助於 而且正如Gunner所建議的那樣,根據你要放入數組的大小嚐試分配內存。

0

strcat將第二個參數附加到第一個參數的末尾。這意味着在你的情況下,連接的總長度將是11個字符,而des只有足夠的空間來容納6.將des[6]更改爲des[11]並且你的程序將正常工作。另請參閱this參考資料以獲取有關strcat的更多信息。

0

strcar連接字符串。你應該確認有足夠的空間。 在你的情況下 - 當連接字符串將有11個字符(10個字符和\最後)時,你已經爲6個字符分配內存