遇到错误时,以下两种方法有什么区别?
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);
}
最佳答案
使用perror
,您将在提供的字符串作为参数之后,得到输出中errno
当前值所隐含的系统错误消息。
使用fprintf(stderr, "…", …)
,您可以完全控制格式。
我很少使用perror()
;它不符合我的要求,因为格式化要传递给它的字符串很麻烦。我使用编写的函数,例如err_syserr()
-代码,这些代码在GitHub上的SOQ(堆栈溢出问题)存储库中以src/libsoq子目录中的文件stderr.c
和stderr.h
可用。
在BSD上,有一个名为err(3)
的类似软件包。您也可以在Linux上找到它(请参见err(3)
)。您可能更喜欢在我的代码上使用它,仅是因为系统功能设法间接地间接控制了argv[0]
的值,而我的代码不是因为没有可移植的接口来访问,但通过argv[0]
的参数除外,因此我的代码依赖于您在main()
中调用err_setarg0(argv[0])
来设置程序名称。
关于c - 错误:perror和fprintf之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58161315/