Стандарт C ++ говорит об этой функции getline
:
21.3.7.9 Устройства вставки и извлечения [lib.string.io]
template<class charT, class traits, class Allocator>
basic_istream<charT,traits>&
getline(basic_istream<charT,traits>& is,
basic_string<charT,traits,Allocator>& str,
charT delim);
Эффекты: Начинается с построения часового объекта k
, как если бы basic_istream<charT,traits>::sentry k(is)
.Если bool(k)
истинно, он вызывает str.erase()
, а затем извлекает символы из is
и добавляет их к str
, как если бы вызывал str.append(1,c)
, пока не произойдет любое из следующих действий:
- конец файла возникает во входной последовательности (в этом случае функция
getline
вызывает is.setstate(ios_base::eofbit)
). c == delim
для следующего доступного входного символа c
(в этом случае c
извлекается, но не добавляется) (27.4.5.3) - * сохраняется 1031 * символов (в этом случае функция вызывает
is.setstate(ios_base::failbit)
) (27.4.5.3)
Итак, единственными причинами, по которым вы будете получать короткую строку, являются (а) ваша реализация C ++ не соответствует стандарту (очень маловероятно), вы сталкиваетесь с концом файла или читаетелиния 4 гигабайта (маловероятно).