我在 Mac OSX Snow Leopard 上遇到 std::getline 问题。出于某种原因,它限制了输入的大小,而在 Debian/Ubuntu 上它的大小是无限的?
std::getline(std::cin, input)
关于限制的任何线索?
平台(Windows / Unix / Mac OSX)之间的区别不是std :: getline。这就是在不同平台上定义行终止符的方式。它是 '\n\r' 用于基于 Windows,'\n' 用于基于 unix 和 ('\r'?) 用于 MacOS 平台。尝试使用 MacOS 编辑器生成文本文件(或测试文件),并检查使用 std::getline 的输入大小是否仍有限制?
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
,就好像 by 一样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 GB 的行(不大可能)。