无法读取字符串的长 cin 输入

Can't read in a long cin input to a string

本文关键字:cin 输入 字符串 读取      更新时间:2023-10-16

我的代码看起来像

string inputString;
std::getline (std::cin, inputString)
cout << inputString;

当我一个长字符串〜30k字符时,输入串只有该字符串的一部分。有什么想法如何解决?

std::getline() cppreference上的文档:

getline从输入流读取字符并将其放入字符串中:

1。表现为UnformattedInputFunction,除了input.gcount()不受影响。构造和检查哨兵对象后,执行以下操作:

  1. 调用str.erase()

  2. input提取字符,并将其附加到str,直到发生以下一个(在列出的顺序中检查)

    a。input上的文件结束条件,在这种情况下,getline设置eofbit

    b。下一个可用的输入字符是delim,如Traits::eq(c, delim)测试,在这种情况下,从input提取了定界符字符,但未附加到str

    c。 str.max_size()字符已存储,在这种情况下getline设置failbit并返回

  3. 如果出于任何原因没有提取字符(甚至是丢弃的定界符),则getline设置failbit并返回。

2。与 getline(input, str, input.widen('n'))相同,即默认分界符是endline字符。

因此,请检查您的输入是否受inputString.max_size()的值限制。它可能在您的系统上接近32K。

默认情况下,终端在规范模式下工作,并且具有长度4096字节的缓冲区。这就是为什么字符串可以接受的最大输入为4095的原因。现在,解决方案是更改为Linux中的非规范模式。您可以通过

做到这一点
$ stty -icanon # for switching to the noncanonical mode.
$ stty icanon  # reverting back to the canonical mode when you are done.