我正在使用 K&R 自学 C。练习 1-16 要求我重构一些提供的代码以给出“任意长输入行”的长度。
在处理这个问题时,我发现我的终端在 1023 个字符后停止接受输入;一个非常可疑的数字我相信你会同意的!!我在 Mac OS X 和 OpenBSD 上进行了测试,看到了相同的行为。该程序没有停止响应,因为键入退格键和提交输入工作正常。
我无法弄清楚如何使用 gdb 进行调试,因为问题发生在数据输入期间,而不是在使用 gdb 单步执行时提交之后。
我在 getchar 或 bash 的联机帮助页中看不到任何关于限制的引用,事实上,无论如何输入似乎很少。
我将问题简化为以下内容并看到相同的行为。
#include <stdio.h>
main()
{
int c,i=0;
while ((c=getchar()) != EOF && c!='\n')
++i;
printf("%d\n",i);
return 0;
}
请大家解释一下:
- 为什么会这样
- 我如何自己调试此类问题
非常感谢。
最佳答案
根据对我的问题的评论,这似乎是一个终端限制。将文件通过管道传输到程序中会按预期工作。
关于C 程序停止接受 1023 个字符的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497424/