在 C/C++ 编程中,错误信息的捕获和处理是保证程序健壮性的重要部分。错误通常通过函数的返回值或者全局变量 errno 来表示。为了方便调试和错误处理,C/C++ 提供了多种函数和方法来获取和输出错误信息。
errno 与 perror()
errno 是一个全局变量,当系统调用或库函数失败时,它会被设置为一个错误代码。这个值是由操作系统在发生错误时设置的,每个错误代码代表特定类型的错误。需要注意的是,errno 的值只在出错时才有意义,且不是线程安全的。
perror() 用于打印基于 errno 错误码的错误信息。它将 errno 的值转换为对应的错误消息并输出到标准错误流 stderr。如果提供了自定义的前缀字符串,则会一起输出。
比如我们尝试打开一个不存在的文件:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *file = fopen("non_existent_file.txt", "r");
if (!file) {
perror("File opening failed");
}
return 0;
}
运行后你会看到类似这样的输出:
File opening failed: No such file or directory
这里 perror() 输出了一个由 errno 设置的错误信息,具体是'没有这样的文件或目录'。
strerror()
strerror() 函数用于将 errno 错误代码转换为可读的字符串,返回与 errno 对应的错误消息的指针。你可以在程序中直接调用它来获取详细的错误描述,然后自己决定如何输出。
#include <stdio.h>
#include <errno.h>
#
{
FILE *file = (, );
(!file) {
(, (errno));
}
;
}


