错误:perror和fprintf之间的区别

时间:2019-09-30 03:53:27

标签: c malloc

以下两种方法在遇到错误时有什么区别?

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);
}

1 个答案:

答案 0 :(得分:0)

使用perror,您将在提供的字符串作为参数之后,得到输出中errno当前值所隐含的系统错误消息。

使用fprintf(stderr, "…", …),您可以完全控制格式。

我很少使用perror();它不符合我的要求,因为格式化要传递给它的字符串很麻烦。我使用了诸如err_syserr()这样的函数,这些代码在GitHub上的SOQ(堆栈溢出问题)存储库中以stderr.cstderr.h中的文件{{ 3}}子目录。

在BSD上,有一个名为err(3)的类似软件包;您也可以在Linux上找到它(请参见src/libsoq)。您可能更愿意在我的代码上使用它,仅是因为系统函数间接地设法隐含了argv[0]的值,而我的代码不是因为没有可移植的接口来访问argv[0](通过main()的参数除外),因此我的代码依赖于您在err_setarg0(argv[0])中调用main()来设置程序名称。