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.
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
.
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.
来源:https://stackoverflow.com/questions/2471430/how-to-set-maximum-read-length-for-a-stream-in-c