2014-01-22 39 views
0

我創建了一個項目文件,並在int main中調用函數。在函數中,有一個字符數組,corr [40],它用字母來存儲用戶的輸入字母(它是一個hang子手遊戲)。執行該函數後,程序返回到main。如果再次調用該函數,則陣列具有前一個調用的輸入,並且不會被擦除。因此,以前的輸入中只有少數字符被新字符覆蓋。C++中的字符串堆內存

所以我想知道如何從堆分配內存到數組(使用指針)?或者有沒有其他方法可以解決這個問題?

+1

只是使用std :: string。特別是它是一個班級的成員。 – concept3d

+5

你能舉個例子嗎? – user1436187

+0

目前尚不清楚問題所在。如果你想在調用函數時清除數組,你需要自己動手。如果您想保留通話之間的數據,請將其作爲該功能的參數。 – molbdnilo

回答

1

你有一個char[40]作爲一個函數的局部變量。由於這不是類的類型,所以沒有構造函數。初始值將取決於以前在該內存位置的任何內容。這可能是以前的所有或部分信件。

如果你想在陣列爲零每一次,你可以只使用std::fill(std::begin(foo), std::end(foo), 0);

注意,使用的堆內存是無解的。仍然沒有構造函數來初始化堆內存,所以也會有任何舊值。使用std :: string,確實有有一個構造函數,是一個解決方案。

+0

,所以我只需添加std :: fill(std :: begin(foo),std :: end( foo),0);在我的代碼?何時調用函數? –

+0

緊跟在數組的定義之後。 (只是要清楚,'foo'應該替換爲你的數組的名稱,並且你可能需要一個頭文件) – MSalters

+0

char corr [40]; std :: fill(std :: begin(corr),std :: end(corr),0); 我得到一個錯誤,說{expected constructor,destructor或type conversion before'('token} –