我在Mac OSX Snow Leopard上遇到std :: getline问题。由于某种原因,它限制了输入的大小,而在Debian / Ubuntu上它的大小是无限的?
std::getline(std::cin, input)
有关限制的任何线索?
答案 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千兆字节(极不可能)。