perror与printf,及其在错误信息打印上的应用

原型

printf和perror都可以在屏幕上打印信息。那么这两个有什么区别呢?
首先看函数原型:

	#include <stdio.h>
	void perror(const char *s); // perror - print a system error message
	
	#include <stdio.h>
	int printf(const char *format, ...);

显著区别:

  • perror只能接收一个字符串,比如perror(“prefix:”)
    接收的字符串会被作为前缀,后面会自动打印错误信息。
  • printf无需多言

使用

	perror打印错误信息非常方便:
	perror("prefix:")
	//输出:
	// prefix: info about errno
	
	而printf想要打印错误信息,需要这样写:
	printf("prefix: %s\n", strerror(errno));
	//输出:
	// prefix: info about errno

区别总结

可以看到,printf想要打印错误信息,需要配合函数strerror和linux系统变量errno一起使用。而perror只需要简单传入一个前缀就好了。这是使用方法上两者的区别。

此外,printf的是往标准输出(stdout)上打印,而perror是往标准错误输出(stderr)上打印。printf的fmt参数末尾必须要带上’\n’,才能促使printf函数将写入缓冲区的数据打印到屏幕上;若不加’\n’,则每次调用完printf后,不会立即打印,要等到缓冲区满或者在程序中手动调用fflush(stdout)函数时才会打印到屏幕上。这点要尤其注意
而perror的stderr是不缓冲、立即打印的。

综上,如果是打印错误信息,尤其是调用系统调用函数或库函数导致的错误,首选perror,因为使用简单且内容自动刷新到屏幕上;如果对格式有更多定制化的要求,那么可以使用printf、strerror、errno,但是结尾记得加’\n’,以确保数据及时刷新到屏幕上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值