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

时间:2016-02-06 18:46:49

标签: c++ arrays iostream

我想知道从命令行获取输入的可接受方式是什么,它也可以捕获空白区域。我以为这样做会......

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 ++中处理它

1 个答案:

答案 0 :(得分:3)

默认情况下,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;
}

这不存在缓冲区溢出的风险,应该尽可能多地处理文本(当然,受可用内存的限制。)