Как установить максимальную длину чтения для потока в C ++? - PullRequest
4 голосов
/ 18 марта 2010

Я читаю данные из потока в массив символов заданной длины, и я хотел бы, чтобы максимальная ширина чтения была достаточно большой, чтобы поместиться в этот массив символов.

Причина, по которой я использую массив символов, заключается в том, что часть моей спецификации заключается в том, что длина любого отдельного токена не может превышать определенного значения, поэтому я сохраняю некоторые вызовы конструктора.

Я думал, что width () сделал то, что хотел, но я явно ошибался ...

РЕДАКТИРОВАТЬ: я использую операторы извлечения потока для выполнения извлечения, так как это плоские текстовые файлы со значениями, разделенными пробелами.

Ответы [ 2 ]

5 голосов
/ 18 марта 2010

Если вы обрабатываете текст, вам нужна функция get: http://cppreference.com/wiki/io/get

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

cin.get(myArray, size);

Примечание: читаются только size - 1 символов, что оставляет пустым терминатор в myArray.

Если это необработанные данные, вы, вероятно, предпочтете read: http://cppreference.com/wiki/io/read

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

cin.read(myArray, size);

size считаны байты.

3 голосов
/ 18 марта 2010
char x[4];
cin.width(4);
cin >> x;
cout << x;

Ввод: "abcdef"
Вывод: "abc" (x[3] является нулевым завершающим символом)

Ширина отлично работает в этом случае.

Примечание. Эмпирическое тестирование показывает, что вызов cin.width выполняется только для одной потоковой операции. Вместо этого может быть удобнее использовать cin >> setw(4) >> x;, хотя для этого требуется iomanip.

...