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

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.cstderr.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/

10-11 23:12