views:

177

answers:

2

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.

+3  A: 

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.

Bill
+1  A: 
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.

Brian
Note that if the input contains white-space this will fail. Try it for Input: "a b c d e f". Output: "a".
Bill
@Bill: I consider that a good thing. The OP said that the values are separated by whitespace.
Brian
Ah, I missed that edit, thanks!
Bill