如何在C++中设置流的最大读取长度?

Ale*_*lex 4 c++ iostream stringstream

我正在将数据从流读取到给定长度的char数组中,并且我想使读取的最大宽度足够大以适合该char数组.

我使用char数组的原因是我的规范的一部分是任何单个标记的长度不能超过某个值,所以我节省了一些构造函数调用.

我认为width()做了我想要的,但我显然错了......

编辑:我正在使用流提取操作符来执行提取,因为这些是平面文本文件,其值由空格分隔.

Bil*_*ill 5

如果您正在处理文本,那么您正在寻找get功能:http://cppreference.com/wiki/io/get

const int size = 200;
char myArray[size] = {};

cin.get(myArray, size);
Run Code Online (Sandbox Code Playgroud)

注意:只size - 1读取字符,在myArray中留下NULL终止符.

如果是原始数据,您可能更喜欢read:http://cppreference.com/wiki/io/read

const int size = 200;
char myArray[size] = {};

cin.read(myArray, size);
Run Code Online (Sandbox Code Playgroud)

size 读取字节.


Bri*_*ian 4

char x[4];
cin.width(4);
cin >> x;
cout << x;
Run Code Online (Sandbox Code Playgroud)

输入:“abcdef”
输出:“abc”(x[3]是 null 终止字符)

在这种情况下,宽度效果很好。

注意:经验测试表明 cin.width 调用仅持续一次流操作。使用它可能会更方便cin >> setw(4) >> x;,尽管这需要iomanip.