getchar() 没有读取完整的字符串

问题描述

我正在尝试使用 getchar() 读取控制台中给出的字符串。我给出了一个长度为 20k 的字符串,其中我只能读取 4094 个字符,然后循环中断。使用了以下代码行。

queryParameter

解决方法

我已经在 Ubuntu 中测试了您的代码,似乎是将字符串粘贴到 shell 上的问题,而不是代码的问题。 接下来,确保如上所述将 c 与 EOF 字符进行比较。 为了解决您的问题或首先重现它,我使用 Python 创建了一个 20000 个字符的文件,然后复制了 20000 个字符。 当我将字符粘贴到 shell 上时,它没有给出正确的输出,但如您所说的给出了 4094,这意味着这是一个 shell 限制。

我的解决方案是将输出粘贴到文件中,然后将其重定向到输出。

在 Linux 上,我是这样做的:cat longfile20000 | ./a.out

我发现的一个博客显示了这一点并提出了一种解决方法,但使用文件似乎更好。

http://blog.chaitanya.im/4096-limit#:~:text=The%20reason%20for%20this%20discrepancy%20as%20I%20later,instead%20of%20taking%20input%20from%20the%20command%20line

,

您没有提到您的操作系统,但其控制台 I/O 可能限制为 4096 字节(参见示例 this)。使用换行符和空终止符,您会看到 4094 个字节。

据我所知,没有独立于机器的方法来改变这个限制。无论如何,在大量数据上使用控制台 I/O 感觉是错误的。我建议重新设计,也许使用@VaibhavDS 回答中的建议。

顺便说一下,如果您在退出循环后调用 getchar 会发生什么?我预计输入数据已经丢失,但它可能仍然存在。

编辑添加:您可能会在 this answer 找到有用的信息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...