0
我試圖將char []傳遞給另一個函數,但出於某種原因,我不斷收到奇怪的輸出,但沒有錯誤。我有以下幾種方法:將char []傳遞給另一個函數時出現奇怪的輸出
void storeKey()
{
char keyArray[10];
cout << "Please enter 10bit key" << endl << "==> ";
cin >> keyArray;
storePlaintext(keyArray);
cout << keyArray << endl;
}
void storePlaintext(char key[])
{
char plaintextArray[8];
cout << "Please enter 8bit plaintext" << endl << "==> ";
cin >> plaintextArray;
cout << plaintextArray << endl << key[1] << endl;
//cout << plaintextArray << endl << key << endl;
}
我應該得到一個打印出來的:00000000和1111111111在下一行接着1111111111 但我得到0000000那麼「C」(或隨機的東西),其次是111111111 WHY這是否發生?我應該能夠通過一個數組像我沒有問題沒有對嗎?我需要能夠將數組從函數傳遞到函數並使用它們中的數據。任何幫助都感激不盡。謝謝
如果數組長度爲10個字符,則不能在其中存儲超過9個字符而不會導致未定義的行爲,因爲您需要第10個點用於空終止符。所以輸出'1111111111'會表明你已經觸發了UB,輸入的字符串長於程序可以定義的方式處理的時間。 – cdhowie 2014-09-21 04:27:00
使用'std :: string'。緩衝區溢出是一個問題,std :: string只能解決。 – chris 2014-09-21 04:27:17
即使您沒有使用std :: string,也不要聲明與您想要的大小非常接近的數組,您沒有任何錯誤餘量。如果你已經用50個字符聲明瞭這些數組,你就不會遇到這個問題(但仍然使用'std :: string',所有這些問題都會消失)。 – PaulMcKenzie 2014-09-21 04:27:55