Ограничение размера C ++ std :: getline в Mac OSX - PullRequest
2 голосов
/ 12 октября 2010

У меня проблемы с std :: getline на Mac OSX Snow Leopard.По какой-то причине он ограничивает размер ввода, в то время как в Debian / Ubuntu это неограниченный размер?

std::getline(std::cin, input)

Есть какие-нибудь подсказки по поводу ограничения?

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Стандарт 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 гигабайта (маловероятно).

1 голос
/ 12 октября 2010

Это не std :: getline, который отличается в зависимости от платформы (Windows / Unix / Mac OSX).Это то, как ограничители строки определяются на разных платформах.Это '\ n \ r' для Windows, '\ n' для Unix и ('\ r'?) Для платформ MacOS.Попробуйте сгенерировать текстовый файл (или тестовый файл) с помощью редактора MacOS и проверьте, есть ли у вас ограничение размера ввода с помощью std :: getline?

...