开发者

How to set maximum read length for a stream in C++?

I'm reading data from a stream into a char array of a given length, and I'd like to make the maximum width of read to be large enough to fit in that char array.

The reason I use a char array is that part of my specification is that the length of any individual token cannot exceed a certain value, so I'm saving myself some cons开发者_开发技巧tructor calls.

I thought width() did what I wanted, but I was apparently wrong...

EDIT: I'm using the stream extraction operators to perform the extraction, since these are flat text files with values separated by whitespace.


If you're processing text, you're looking for the get function: http://cppreference.com/wiki/io/get

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

cin.get(myArray, size);

Note: only size - 1 characters are read, which leaves a NULL terminator in myArray.

If it's raw data, you'd probably prefer read: http://cppreference.com/wiki/io/read

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

cin.read(myArray, size);

size bytes are read.


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

Input: "abcdef"
Output: "abc" (x[3] is null terminating char)

Width works fine in this case.

Note: Empirical testing indicates that the cin.width call only lasts for one stream operation. It may be more convenient to use cin >> setw(4) >> x; instead, though this requires iomanip.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜