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