gpt4 book ai didi

c++ - std::string 在来自 std::cin 的 4095 个字符后被截断

转载 作者:行者123 更新时间:2023-12-04 18:28:49 25 4
gpt4 key购买 nike

我的程序需要从标准输入读取多达 50k 个字符的长字符串。代码如下:

#include <iostream>
#include <string>

std::string A;

int main(){
std::cin >> A;
std::cout << "String max: " << A.max_size() << std::endl;
std::cout << "Size: " << A.size();
当我尝试输入一个 10k 字符长的字符串时,我得到以下输出:
String max: 4611686018427387903
Size: 4095
根据谷歌 std::cinstd::string处理 10k 个字符应该没有问题,但出于某种原因 A在 4095 个字符后被截断。我通过将字符串粘贴到默认的 Ubuntu 终端中来输入字符串。在同一个终端中将它粘贴到 Python3 中可以正常工作,这让我相信截断它的不是终端,而是 C++。我用 g++ program.cxx 编译我有 16 GB 的 RAM。
如何从标准输入输入大字符串?任何帮助表示赞赏。
P.S.:如果您需要一个大字符串,只需将其粘贴到 Python 中: print("123"*5000)

最佳答案

在规范模式下,您可能会遇到 Linux 终端的 4096 行限制输入。如果您尝试在 Linux 终端中输入很长的行(>4095 个字符),多余的将被丢弃,直到您输入换行符或 eof 字符以刷新终端缓冲区。
有几种方法可以解决这个问题:

  • 每隔一段时间在输入中插入一个 eof/flush 字符(通常是 ctrl-D)——每个这样的字符都会刷新终端缓冲区,重置 4K 限制,并允许输入更长的行。注意不要在换行符或另一个 eof 之后立即插入一个,因为这将导致输入
  • 上的 EOF
  • 将终端置于非规范模式。这将导致在进程读取缓冲区时刷新缓冲区;大多数进程的读取速度通常比在终端中键入或粘贴字符的速度要快得多,因此您永远不会接近 4K 限制。
  • 关于c++ - std::string 在来自 std::cin 的 4095 个字符后被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68765094/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com