问题描述
我正在尝试使用 getchar() 读取控制台中给出的字符串。我给出了一个长度为 20k 的字符串,其中我只能读取 4094 个字符,然后循环中断。使用了以下代码行。
queryParameter
解决方法
我已经在 Ubuntu 中测试了您的代码,似乎是将字符串粘贴到 shell 上的问题,而不是代码的问题。 接下来,确保如上所述将 c 与 EOF 字符进行比较。 为了解决您的问题或首先重现它,我使用 Python 创建了一个 20000 个字符的文件,然后复制了 20000 个字符。 当我将字符粘贴到 shell 上时,它没有给出正确的输出,但如您所说的给出了 4094,这意味着这是一个 shell 限制。
我的解决方案是将输出粘贴到文件中,然后将其重定向到输出。
在 Linux 上,我是这样做的:cat longfile20000 | ./a.out
我发现的一个博客显示了这一点并提出了一种解决方法,但使用文件似乎更好。
,您没有提到您的操作系统,但其控制台 I/O 可能限制为 4096 字节(参见示例 this)。使用换行符和空终止符,您会看到 4094 个字节。
据我所知,没有独立于机器的方法来改变这个限制。无论如何,在大量数据上使用控制台 I/O 感觉是错误的。我建议重新设计,也许使用@VaibhavDS 回答中的建议。
顺便说一下,如果您在退出循环后调用 getchar
会发生什么?我预计输入数据已经丢失,但它可能仍然存在。
编辑添加:您可能会在 this answer 找到有用的信息。