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

时间:2010-03-18 16:11:46

标签: c++ iostream stringstream

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

cin.get(myArray, size);

注意:只读取size - 1个字符,这会在myArray中留下一个NULL终结符。

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

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

cin.read(myArray, size);

size字节被读取。

答案 1 :(得分:3)

char x[4];
cin.width(4);
cin >> x;
cout << x;

输入:“abcdef”
输出:“abc” (x[3]为null终止char)

在这种情况下,宽度可以正常工作。

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