C 错误处理

  • Post category:C

C 语言是一种低级语言,其相对较高的复杂度和灵活性使得代码容易出现错误或异常情况。因此,在开发 C 语言程序时,为了使程序更加健壮和可靠,需要进行适当的错误处理。本文将为大家介绍 C 语言中错误处理的完整使用攻略。

什么是错误处理

错误处理是指程序在运行过程中处理异常情况的一种机制。在 C 语言中,错误处理可以通过函数返回值、全局变量 errno 和信号处理器等方式进行。错误处理的目的是使程序出现错误时能够自动或手动地恢复到正常状态,从而保障程序正常运行和数据的安全性。

错误处理的主要步骤

C 语言中的错误处理主要可分为以下步骤:

  1. 判断错误类型:根据具体的应用场景和实际需求,判断何种异常属于错误、警告还是严重错误。
  2. 尽早发现错误:在程序的合适位置,提前设置并检测错误,及时处理或者记录,避免错误扩大化,使错误影响到正常的程序执行。
  3. 错误处理:处理或者记录错误异常。

函数返回值错误处理示例

在 C 语言中,有些函数的返回值表示了函数的执行状态和结果,例如:-1 表示函数执行失败,0 表示函数执行成功。当函数返回的不是预期的值时,需要进行相应的错误处理。以下是一个函数返回值错误处理的示例:

#include <stdio.h>

int main() {
   FILE *fp;
   char str[60];
   /* 打开文件的路径 */
   fp = fopen("E:/sample.txt", "r");
   if(fp == NULL) {
      perror("Error");
      return(-1);
   }
   if(fgets(str, 60, fp) != NULL) {
      printf("%s\n", str);
   }
   fclose(fp);
   return 0;
}

该示例中,程序执行时需要读取指定路径下的 sample.txt 文件。如果文件不存在,则会返回 NULL,并在程序中使用 perror 来输出相应的错误提示信息。如果文件读取成功,则会输出文件内容并关闭文件。

全局变量 errno 错误处理示例

C 标准库提供了一个名为 errno 的全局变量,用于保存上一次函数调用的错误码。当函数执行失败时会设置相应的错误码,errno 变量存储了该错误码。以下是一个 errno 错误处理示例:

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main () {
   FILE * pf;
   int errnum;
   /* 尝试打开不存在的文件 */
   pf = fopen ("file.txt", "rb");
   if (pf == NULL){
      errnum = errno;
      fprintf(stderr, "错误号:%d\n", errno);
      perror("通过perror输出错误");
      fprintf(stderr, "打开文件错误:%s\n", strerror( errnum ));
   }else{
      fclose (pf);
   }
   return 0;
}

该示例中,程序在尝试打开一个不存在的文件时,会失败并设置 errno 的值。程序通过 perror 和 strerror 函数输出错误提示信息。其中,perror 函数用来输出错误信息的升级版,可以通过参数自定义输出前缀和后缀,便于根据实际应用情况进行选择。

小结

C 语言中的错误处理对于程序的正常执行以及数据的保障而言十分重要,我们可以根据具体需求采用不同方法来进行错误处理,如函数返回值、全局变量 errno 和信号处理器等。通过合适的错误处理策略,我们可以有效地保障代码的稳定性和可靠性。