2016-04-10 107 views
0

所以我試圖超載>>運算符,但在這種情況下,我得到一個空終止的字符串英寸我如何讓用戶只輸入足夠的字符,我動態分配char[]命名數據和分配它。我知道有一種方法可以讓我製作一個尺寸非常大的臨時char[],並使用for循環來複制它們,但是我希望不會製作很大的char[]。我有這樣的代碼,但現在我知道被通過,因爲可以在我的班級長度這是行不通的。重載>>使用istream

std::istream & operator>>(std::istream & is, String346 & objIn) { 
     using std::istream; 

     is >> objIn.data; 

     return is; 
    } 
+0

您可以一次獲取一個字符,並在存儲之前檢查是否有足夠的空間 –

回答

2

C++語言中沒有規定在技術上禁止用戶「只輸入足夠的字符「爲你的char陣列。可能有一些特定於操作系統的資源可供您使用,例如限制文本輸入字段中的最大字符數,但這超出了C++的範圍。

std::istream讀取時,您的代碼必須準備好處理和處理不符合您的條件的輸入。拋出一個異常,在打印錯誤信息後退出程序,或者讀取最多可以接受的字符數,並忽略額外的 - 以任何對您有意義的方式。這完全取決於你。

1

std::istream::get()有一個過載,允許您限制輸入的大小。儘管如此,你仍然需要處理剩餘的輸入。