一、前言
我们经常在运行代码时发现程序出错,但是一时之间又很难发现原因,往往需要一步一步调试过程最后发现错误点,然鹅这种方式的效率往往很低,所以我们可以借用一些函数来快速发现这些错误,提高写代码的效率
二、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库中的函数,用于报告错误消息。它会打印你提供的自定义消息,后跟一个冒一个空格,然后是描述当前错误的消息。它的优点是简单易用,适用于快速报告错误的场景。