将标准输入读入 char 数组 - C++

Reading in standard input into a char array - C++

我想知道从捕获白色 space 的命令行获取输入的公认方式是什么。我以为这样就可以了...

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;
}

但看起来它跳过了白色 space。我切换到这个...

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;
}

这没有缓冲区溢出的风险,并且应该处理尽可能多的文本(当然,受限于可用内存。)