Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 constructor 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.

like image 473
alexgolec Avatar asked Mar 18 '10 16:03

alexgolec


2 Answers

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.

like image 84
Bill Avatar answered Sep 21 '22 09:09

Bill


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.

like image 36
Brian Avatar answered Sep 20 '22 09:09

Brian