C 通过fgets()读取文件时检查错误

C 通过fgets()读取文件时检查错误,c,arrays,indexoutofboundsexception,fgets,C,Arrays,Indexoutofboundsexception,Fgets,我想知道如何在fgets()上检测错误,我正在编写测试类,因此我想检查用户是否在fgets()上输入了错误的缓冲区大小,并且我想显示一条消息,不让程序自行退出 char a[10]; fgets(a,100,stdin); 我想让程序在状态2下退出,因为我将澄清错误发生的原因在让用户放松之前,通过良好的编程实践、静态分析、测试和调试可以更好地解决编程问题。需要为其编写代码的错误类型是由于错误输入而在运行时发生的错误。如果在代码中编写未检测到的bug,那么编写更多的代码来检测它们就没有什么意义

我想知道如何在
fgets()
上检测错误,我正在编写测试类,因此我想检查用户是否在
fgets()
上输入了错误的缓冲区大小,并且我想显示一条消息,不让程序自行退出

char a[10];

fgets(a,100,stdin);

我想让程序在状态2下退出,因为我将澄清错误发生的原因

在让用户放松之前,通过良好的编程实践、静态分析、测试和调试可以更好地解决编程问题。需要为其编写代码的错误类型是由于错误输入而在运行时发生的错误。如果在代码中编写未检测到的bug,那么编写更多的代码来检测它们就没有什么意义了

在您的示例中,减少编码错误机会的更好的编码实践是:

char a[10] ;

fgets( a, sizeof(a), stdin ) ;

这不是用户输入错误的缓冲区大小的问题。在你的例子中,程序员犯了错误。您正在请求运行时检查编译时错误。这将导致检测到堆栈崩溃,我不希望程序在此情况下退出。我需要显示其他你不能显示的信息;如果损坏堆栈,代码将不再正常运行,因此无法保证任何处理代码都能正常运行。事实上,即使操作系统会检测到它,它也不是一个给定值——它不是由没有执行边界检查的语言定义的。只有在访问无效内存时,操作系统才会检测到它。一些调试器将执行检查。你必须在错误发生之前检测到它。这是一个明显的编码错误,这就是您需要修复它的地方。允许用户输入100个字节,但只提供10个缓冲区是您的错误,而不是用户的错误。我知道这是程序员的错误,我也想检测出来,这不是您所要求的。@bigdataolddriver
fgets()
返回指针、
a
或空指针
fgets()
不返回字符。