我正在做一個任務,其中第一部分要求我們提示用戶輸入一個字符串。我們需要把這個輸入作爲一個cstring存儲在堆上(不是std :: string,所以我們對cstring有了更好的理解)。我有一些工作正常:C++存儲字符串輸入爲cstring
char *input = new char[500];
cout << "enter a string: ";
cin.getline(input, 500);
但我覺得這是不是這樣做的問候創造的500數組,並希望他們不要超過該字符數限制一個很好的辦法。有沒有一種方法可以做到這一點,而不是製造一個可笑的大陣列,並可能不會使用任何附近的那麼多?這似乎是一種非常業餘的方式。我認爲這是可能的使用std ::字符串,但我必須使用cstring :(
如果你不指定大小,然後將如何堆知道它應該做什麼的空間量爲您字符?它將在此分配500個字符的空間,並確保這個空間不被其他應用程序佔用。 – 2014-03-07 04:17:07
'std :: string'的方式可能是通過分配一個小小的緩衝區,然後重新分配和複製一次,直到沒有更多的字符被讀取爲止,並且可能重複和重新分配多次。你可以用這種方式來實現它,但不值得麻煩。現在500字節的空間不是很大。 – Brian
'std :: string'會自動調整大小以適應,所以顯然它會更容易使用。總的來說,你做這件事的方式是關於如何在沒有足夠了解輸入大小的情況下做得更精確。如果你想節省整體空間,你可以填充你的緩衝區,然後找到它的大小,並製作另一個完全相同大小的數組,將你的緩衝區複製到該數組,然後釋放緩衝區。 – IllusiveBrian