错误处理

简介: 错误处理

流的打开和关闭笔记中的示例中,如果打开的文件不存在,同时 mode 参数选择 rr+ ,那么程序运行将会出错,错误信息为文件不存在,一般会由系统返回这个错误信息。错误信息所对应的一个错误码会被保存在全局变量errno 中。程序员可以通过相应的函数打印这个错误信息。


错误处理相关函数 perror() 被用来输出保存在变量 errno 中的错误码所对应的错误信息。

#include <stdio.h>
void perror(const char *s);点击复制复制失败已复制


参数 s 可以自行定义,可传入一个提示错误的字符串,如下所示:

#include <stdio.h>
int main(int argc, const char *argv[]) {
  FILE *fp;
  if ((fp = fopen("test.txt", "r")) == NULL) {
    perror("fopen error");
    return -1;
  }
  fclose(fp);
  return 0;
}点击复制复制失败已复制


如果被打开的文件 test.txt 不存在, mode 参数选择为 r ,运行结果如下所示:

$ gcc main.c && ./a.out
fopen error: No such file or directory点击复制复制失败已复制


字符串 fopen error 作为参数传递给 perror() 函数,并最终输出。系统输出的错误信息为 No such file or directory 。关于错误信息的定义在 <asm-generic/errno-base.h> 中可查看,信息对应的错误码为 ENOENT ,并保存在 errno 变量中。

#define ENOENT 2 /* No such file or directory */点击复制复制失败已复制


strerror() 函数也可用于处理相关错误,效果与 perror 类似, strerror() 函数同样用于打印错误码所对应的错误信息。

#include <string.h>
char *strerror(int errnum);点击复制复制失败已复制


参数 errnum 需要传入错误码,由于函数运行产生错误,系统会将错误码保存在全局变量 errno 中,因此参数直接传递 errno 便可。使用示例如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc, const char *argv[]) {
  FILE *fp;
  if ((fp = fopen("test.txt", "r")) == NULL) {
    printf("fopen error:%s\n", strerror(errno));
    return -1;
  }
  fclose(fp);
  return 0;
}点击复制复制失败已复制


运行结果如下所示:

$ gcc main.c && ./a.out
fopen error:No such file or directory
目录
相关文章
|
8月前
|
Unix 程序员 C语言
C 错误处理
C 错误处理。
39 3
|
8月前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
8月前
|
程序员 测试技术 数据库连接
PHP编程中的错误处理技巧
在PHP编程中,处理错误是至关重要的一环。本文将介绍几种常见的PHP错误类型及其处理技巧,包括语法错误、运行时错误和逻辑错误。通过学习正确的错误处理方法,可以提高代码的可靠性和可维护性,从而更好地保障程序的稳定性和安全性。
69 2
|
8月前
|
网络协议 网络安全 Python
Python网络编程基础(Socket编程) 错误处理和异常
【4月更文挑战第10天】网络编程涉及到很多复杂的操作和潜在的风险,如连接失败、数据丢失、超时等问题。因此,正确的错误处理和异常捕获是确保网络程序稳定性和可靠性的关键。本章将介绍网络编程中常见的错误和异常,并探讨如何在Python中进行有效的错误处理。
|
8月前
|
中间件
Koa2 的错误处理机制是什么?如何捕获错误?
Koa2 的错误处理机制是什么?如何捕获错误?
171 0
|
Go 开发者
错误处理不再难!Go语言错误处理完全指南
错误处理不再难!Go语言错误处理完全指南
222 0
|
3月前
|
数据采集 C# 数据库
数据验证与错误处理:C#中的实践
【10月更文挑战第1天】在软件开发中,数据验证与错误处理至关重要,不仅能提升程序的健壮性和安全性,还能改善用户体验。本文从基础概念入手,详细介绍了C#中的数据验证方法,包括使用自定义属性和静态方法验证数据,以及常见的错误处理技巧,如Try-Catch-Finally结构和自定义异常。通过具体示例,帮助读者掌握最佳实践,构建高质量应用。
128 3
|
8月前
|
安全 C++
C++中的异常处理与错误处理机制
C++中的异常处理与错误处理机制
88 0
|
8月前
|
安全 Java 程序员
c错误处理
c错误处理
86 2
|
Java 程序员 编译器
异常处理错误
异常处理错误
94 0