C语言 错误:错误和 fprintf 之间的区别



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

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])来设置程序名称。

相关内容

  • 没有找到相关文章

最新更新