errno报错信息的使用和反馈函数应用场景

1. perror():将errno对应的错误信息输出到标准错误流中。

2. strerror_r():将errno对应的错误信息存储在指定的缓冲区中。

3. hstrerror():将指定的网络错误码转换成对应的错误信息。

4.strerror(errno)通常用于获取errno对应的错误信息

这些函数通常用于调试和错误处理的场景中,可以帮助程序员更好地理解和解决程序中出现的错误。例如,在程序中出现了文件打开失败的错误,可以使用perror()或strerror()函数输出错误信息,以便及时发现和解决问题。

下面是这三个函数的简单示例代码:

1. perror():

```c
#include <stdio.h>
#include <errno.h>

int main() {
    FILE *fp = fopen("non_existent_file.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
    }
    return 0;
}
```

当运行这段代码时,如果文件打开失败,将会输出类似于“Error opening file: No such file or directory”这样的错误信息,其中“No such file or directory”就是errno对应的错误信息。

2. strerror_r():

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

int main() {
    char buf[1024];
    int errnum = EACCES; // 例如,EACCES代表权限错误
    strerror_r(errnum, buf, sizeof(buf));
    printf("Error message: %s\n", buf);
    return 0;
}
```

在上面的代码中,strerror_r()函数将错误码EACCES对应的错误信息存储在buf中,并输出错误信息。

3. hstrerror():

```c
#include <stdio.h>
#include <netdb.h>

int main() {
    herror("Host not found");
    return 0;
}
```

在上面的代码中,herror()函数将指定的网络错误信息输出到标准错误流中,这里输出的是“Host not found”。
4.
当使用strerror(errno)时,通常是在遇到系统调用或库函数返回错误时,希望将错误码转换成对应的错误信息进行输出或记录。以下是一个简单的示例:

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

int main() {
    FILE *fp = fopen("non_existent_file.txt", "r");
    if (fp == NULL) {
        fprintf(stderr, "Error opening file: %s\n", strerror(errno));
    }
    return 0;
}
```

在这个示例中,当文件打开失败时,strerror(errno)将会返回对应的错误信息,比如"No such file or directory",然后通过fprintf将错误信息输出到标准错误流中。
对于函数strerror()和perror(),它们的用法是不同的:

1. strerror()函数的原型是char *strerror(int errnum),它接受一个整数参数errnum,返回对应的错误信息字符串。因此,你不能直接将字符串作为参数传递给strerror()。正确的用法是传递一个整数错误码作为参数,然后它会返回对应的错误信息字符串。

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

int main() {
    int errnum = ENOENT; // 例如,ENOENT代表文件不存在的错误码
    printf("Error message: %s\n", strerror(errnum));
    return 0;
}
```

2. perror()函数的原型是void perror(const char *s),它接受一个字符串参数s,将字符串和当前errno的错误信息一起输出到标准错误流中。因此,你可以传递一个字符串作为参数给perror(),它会将该字符串和当前错误信息一起输出。

```c
#include <stdio.h>
#include <errno.h>

int main() {
    FILE *fp = fopen("non_existent_file.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
    }
    return 0;
}
```

总结来说,strerror()函数用于将错误码转换成对应的错误信息字符串,而perror()函数用于将自定义的错误信息和当前errno的错误信息一起输出到标准错误流中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值