Mac OSX上的C ++ std :: getline大小限制

时间:2010-10-11 21:05:30

标签: c++ max getline

我在Mac OSX Snow Leopard上遇到std :: getline问题。由于某种原因,它限制了输入的大小,而在Debian / Ubuntu上它的大小是无限的?

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

有关限制的任何线索?

2 个答案:

答案 0 :(得分:1)

平台(Windows / Unix / Mac OSX)之间的std :: getline不同。这是线路终结器在不同平台上的定义方式。基于Windows的'\ n \ r',基于unix的'\ n'和MacOS平台的''\ n'')。尝试使用MacOS编辑器生成文本文件(或测试文件)并使用std :: getline检查输入大小是否仍有限制?

答案 1 :(得分:1)

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)
  • 存储
  • str.max_size()个字符(在这种情况下,函数调用is.setstate(ios_base::failbit))(27.4.5.3)

所以,你得到一个短线的唯一原因是(a)你的C ++实现不符合标准(极不可能),你正在命令文件结束,或者你正在阅读4千兆字节(极不可能)。