遇到错误时,以下两种方法有什么区别吗?
if (!mallocd_buffer) {
// this?
fprintf(stderr,"malloc() failed in file %s at line # %d", __FILE__, __LINE__);
// or this?
perror("Failed to copy a stringnnnnn");
exit(EXIT_FAILURE);
}
使用perror
时,您会在作为参数提供的字符串之后获得输出中当前值errno
所暗示的系统错误消息。
使用fprintf(stderr, "…", …)
,您可以完全控制格式。
我很少使用perror()
;它不符合我的要求,因为格式化要传递给它的字符串很麻烦。 我使用我编写的函数,例如err_syserr()
— 在 GitHub 上的 SOQ(堆栈溢出问题(存储库中可用的代码作为文件stderr.c
并在 src/libsoq 子目录中stderr.h
。
在BSD上,有一个名为err(3)
的类似软件包;你也可以在Linux上找到它(见err(3)
(。 您可能更喜欢在我的代码上使用它,如果只是因为系统函数设法间接了解argv[0]
的值,而我的代码不是,因为除了通过参数之外没有可移植接口来访问argv[0]
main()
(,因此我的代码依赖于您在main()
中调用err_setarg0(argv[0])
来设置程序名称。