【C语言】关于错误信息打印的一些技巧


一、前言

我们经常在运行代码时发现程序出错,但是一时之间又很难发现原因,往往需要一步一步调试过程最后发现错误点,然鹅这种方式的效率往往很低,所以我们可以借用一些函数来快速发现这些错误,提高写代码的效率

二、perrof( ) 函数

perror函数是C语言标准库中的一个函数 ,用于在发生系统调用错误时输出有关错误信息的描述。 该函数定义在 stdio.h头文件中。perror根据传入的参数(通常是一个字符串)生成一个描述性的错误消息,然后将这个消息输出到标准错误流(stderr)。

函数原型如下:

#include <stdio.h> //使用此函数需引入此头文件
void perror(const char *str);

在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和errno所对应的错误一起输出。

举个例子:

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file_ptr;

    file_ptr = fopen("non_existent_file.txt", "r");
    if (file_ptr == NULL) {
        perror("Error opening file");
        return 1;
    }

    // ... 其他操作 ...

    fclose(file_ptr);
    return 0;
}

在上面的示例中,当试图打开一个不存在的文件时,fopen函数会返回NULL,并将errno设置为一个特定的错误码。

Error opening file: No such file or directory

这里的 “Error opening file” 是我们提供给 perror 的描述,而 “No such file or directory” 是与 errno 值相关的系统错误消息。


三、strerror( ) 函数

strerror函数是标准C库中的一种函数,它用于生成描述错误代码的字符串。这个函数在string.h头文件中定义。

这个函数的原型是:

#include <string.h> //使用此函数需引入此头文件
char *strerror(int errnum);

参数
该函数接受一个整数errnum作为参数,这个参数通常是一个错误代码,比如你可能从某些函数(如open或read)中得到这样的错误代码。

返回值
函数会返回一个指向描述该错误的字符串的指针。这个字符串可以用来打印错误消息,使得用户能够理解发生了什么问题。

举个例子

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

int main() {
    FILE *file = fopen("non_existent_file.txt", "r");
    if (file == NULL) {
        printf("打开文件出错: %s\n", strerror(errno));
        return 1;
    }

    // 做一些处理
    fclose(file);
    return 0;
}
  • 在这个例子中,如果文件不存在,fopen会返回NULL,并将errmo设置为表示错误的值。然后,我们可以使用strerror来获取并打印描述这个错误的消息。
  • 另外,也应该注意strerror可能不会知道所有可能的错误代码。如果你传递一个它不认识的错误代码,它可能会返回一个消息说这个错误未知。

四、小结

  • strerror函数:它是标准C库中的函数,用于生成描述错误代码的字符串。它接受一个错误码作为参数,并返回一个描述错误的字符串。这个字符串可以用于打印错误消息或其他需要错误描述的场景。
  • perror函数:它也是标准C库中的函数,用于报告错误消息。它会打印你提供的自定义消息,后跟一个冒一个空格,然后是描述当前错误的消息。它的优点是简单易用,适用于快速报告错误的场景。
  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值