хм .... >>
читает до первого пробела, в то время как strlen считает до первого нуля. Они могут быть смешаны, если вы точно знаете, что в середине строки, которую вы собираетесь читать, нет пробелов и что не более 100 последовательных символов. Если нет, вы переполните буфер перед броском.
Кроме того, при доступе к буферу не все строки уже присутствуют (строка может проходить через буферное пространство, требуя частичного чтения и повторного заполнения буфера ...)
Если пробелы являются разделителями, почему бы просто не прочитать std::string
и не отреагировать на его окончательное состояние? Вся вышеуказанная динамика уже обработана внутри >>
для std :: string.
[РЕДАКТИРОВАТЬ после комментариев ниже]
Единственный способ сохранить последовательность неизвестного размера - это динамически распределять пространство и увеличивать его по мере необходимости. Это не больше, не меньше того, что делают жало и вектор.
Независимо от того, используете ли вы их или пишете свой собственный код для выделения и перераспределения там, где требуется больше места, это не меняет сути.
Я начинаю думать, что единственная причина этих требований - увидеть ваши возможности в написании собственного строкового класса. Итак ... просто напишите это:
объявляет класс, содержащий указатель размера и емкости, выделяет некоторое пространство, отслеживает, сколько вы храните, и, когда хранилище недоступно, выделяет другое более широкое хранилище, копирует старое, уничтожает его и соответственно корректирует элемент данных .
Непосредственный доступ к буферу файлов невозможен, поскольку вы не контролируете, как заполняется буфер файлов.