我知道,这两个可以作为错误信息的工作,perror和fprintf与stderr有什么区别?
perror(" ");
fprintf(stderr, " ");
但什么是真正的它们之间的差异?各自的优点/缺点是什么?
我知道,这两个可以作为错误信息的工作,perror和fprintf与stderr有什么区别?
perror(" ");
fprintf(stderr, " ");
但什么是真正的它们之间的差异?各自的优点/缺点是什么?
的PERROR()函数将映射通过 符号errno为语言相关的错误消息,访问的错误编号,其将被 写入标准错误流如下:
首先(如果s是不是一个空指针和字符指向s不是空字节),该字符串指向秒,然后一个 <结肠>和<空间>。
然后出现错误消息字符串,然后是<换行符>。
错误消息的字符串的内容应是相同 由字符串错误()返回的带有参数的errno。
所以,
perror(" ");
会发出类似
: invalid argument
到stderr
,取决于errno
当前值。
但
fprintf(stderr, " ");
将仅发射空格字符stderr
,而不是打印当前errno
值的字符串表示。
fprintf(stderr, " ");
孤立是很无用的。 perror(" ");
将提供有关当前值errno
的数据。
因此,使用perror验证函数返回值将永远是好的做法,perror会自动发送到stderr而不传递任何参数 –
@jorgesaraiva一般来说,是的,因为这会给你一些指示*为什么*失败。 –
这只是你不能将格式参数传递给'perror'。所以它稍快... –
'perror(“foo”)'基本上等于'fprintf(stderr,“foo:%s \ n”,strerror(errno))''。我喜欢使用'fprintf(stderr,“foo:%s。\ n”,strerror(errno))',但仅仅是因为'perror()'输出末尾没有'.'会导致我错误。请记住,如果遇到* fatal *错误,例如'malloc()'失败,或者程序无法打开所需的文件,则需要*报告错误并使用exit退出程序(EXIT_FAILURE);'或'abort();'。 –