【发布时间】:2019-09-22 21:53:18
【问题描述】:
我想知道如何检测fgets() 上的错误,我正在编写测试类,所以我想检查用户是否在fgets() 上输入了错误的缓冲区大小,我想显示一条消息并不要让程序自行退出
char a[10];
fgets(a,100,stdin);
我想让程序以状态 2 退出,因为我会澄清发生的错误
【问题讨论】:
-
不是用户输入了错误的缓冲区大小。在您的示例中,程序员犯了错误。您要求运行时检查编译时错误。
-
这将导致检测到堆栈粉碎,我不希望程序退出。我需要显示其他消息
-
你不能;您破坏了堆栈,您的代码将不再正常运行,因此您不能保证任何处理代码都会正常运行。事实上,即使操作系统会检测到它也不是给定的——它不是由不执行边界检查的语言定义的。仅当访问无效内存时,操作系统才会检测到它。一些调试器将执行检查。您必须在错误发生之前检测到错误。这是一个明显的编码错误,您需要修复它。允许用户输入 100 个字节,但提供仅 10 个字节的缓冲区是您的错误,而不是用户的错误。
-
我知道这是程序员的错误,我也想检测一下,
-
你问的不是这个。
标签: c arrays indexoutofboundsexception fgets