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的错误信息一起输出到标准错误流中。