1.fprintf与printf的区别?
printf函数的接口如下所示:
int printf( const char*format [,argument]...);
fprintf函数的接口如下所示:
int fprintf(FILE *stream,const char*format [,argument]...);
print函数使用的输出设备是标准输出设备,即stdout。在使用fprintf函数时,我们可以在第一个参数使用stout或stderr进行输出信息分类。
如下程序的输出是hello-std-err,这是为什么?
#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-std-out");
fprintf(stderr,"hello-std-err");
sleep(1);
}
return 0;
}
stdout和stderr是不同设备描述符。stout是块设备,stderr则不是。对于块设备,只有当下面几种情况才会被输出,1.遇到回车,2.缓冲区满,3flush被调用。而stderr则不会。
2.printf函数有返回值吗?
printf函数类型为整型,其返回值是整型值。其值实际为printf控制输出的字符数。
看如下函数的输出
#include <stdio.h>
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}
程序会输出4321,这是因为printf的返回值是输出的字符个数。