簡體   English   中英

將標准輸入讀入char數組-C ++

[英]Reading in standard input into a char array - C++

我想知道從命令行獲取輸入的可接受方法是什么,該命令行也捕獲空白。 我以為這樣就可以了...

char text[500];   
int textSize = 0;

int main() {

    while (!cin.eof()) {
        cin >> text[textSize];
        textSize++;
    }

    for(int i = 0; i < textSize; i++) {
        cout << text[i];
    }

return 0;
}

但是看起來它跳過空白。 我切換到這個...

char c;

while ((c = getchar()) != EOF)  {
    text[textSize] = c;
    textSize++;
}

效果很好,但是我從C編程書中知道這一點。 想知道如何在C ++中處理它

默認情況下,C ++中的流提取運算符將跳過空格。 您可以使用noskipws流操縱器來控制它:

while (!cin.eof()) {
    cin >> noskipws >> text[textSize];
    textSize++;
}

就是說,如果您閱讀過多的文本,那么您編寫的程序就會出現明顯的緩沖區溢出問題。 如果您打算讀取固定數量的字節,請使用istream::read 如果您想讀取可變數量的字節,請考慮將std::stringistream::get結合使用,如下所示:

std::string input;
char ch;

while (cin.get(ch)) {
    input += ch;
}

這沒有緩沖區溢出的風險,應該處理盡可能多的文本(當然要受可用內存的限制。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM