fprintf和printf有啥区别吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fprintf和printf有啥区别吗?相关的知识,希望对你有一定的参考价值。
1、原形:fprintf的函数原型为int fprintf( FILE *stream, const char *format, [ argument ]...);而printf的函数原型为:int printf( const char *format [, argument]... )。
2、输出的目标:printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向);fprintf, 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*。
3、缓冲:printf是有缓冲的输出;fprintf没有缓冲。
4、功能:fprintf()传送输出到一个流中的函数;sprintf()格式化输出到数组的函数。
5、返回值:fprintf()成功则返回输出的字节数,错误则返回EOF;sprintf()实际写入数组的字符个数。
扩展资料:
1、fprintf()传送输出到一个流中的函数
原形:int fprintf(FILE *stream,const char *format[,argument,...])
功能:①向文件指针指向的文件输出ASCⅡ代码
②向显示器输出错误信息
使用形式:
①fprintf(文件指针,"输出格式",输出项系列);
②fprintf(stderr,"错误信息");
使用实例:fprintf(stream,"%d %c %f",i,c,f);
其中定义FILE *stream;
int i; char c; float f;
返回值:成功则返回输出的字节数,错误则返回EOF。
头文件:stdio.h
2、sprintf()格式化输出到数组的函数
原形∶int sprintf(buf,format,arg_list)
其中char *buf;
功能∶把arg_list参量的值按format的格式输出到buf中。
例∶sprintf(buffer,"相对扇区号∶%s(其中∶柱面号为%d/磁头号为%d/扇区号为%d)",string,cyls,head,sector);
其中char buffer[100];
char *string=" ";
int cyls,head,sector;
返回值∶实际写入数组的字符个数。
头文件∶stdio.h
参考技术A1,printf函数原型extern int printf(const char *format,...)。
2,fprintf函数原型为int fprintf( FILE *stream, const char *format, [ argument ]...)。
3,printf用于向终端(显示器、控制台等)输出字符,格式控制由要输出的文字和数据格式说明组成。
4,fprintf其作用是传送格式化输出到一个文件中与打印机,输出函数根据指定的格式向输出流写入数据。
扩展资料
fprintf( )会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\\0')为止。
需要注意的一点是,头文件<stdio.h>为旧版C语言用法,是错误的。
int fprintf (FILE* stream, const char*format, [argument])
FILE*stream:文件指针
const char* format:输出格式
[argument]:附加参数列表
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.printf在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向未重定向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。
要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
Format 参数是包含三种对象类型的一个字符串。
* 无格式字符复制到输出流。
* 转换规范,每个规范导致在值参数列表中检索 1 个或更多个项。
* 转义序列。
参考技术B1、作用不同:fprintf是用于文件操作的;printf就是在屏幕打印出一段字符串。
2、原型不同:fprintf原型是int fprintf( FILE *stream, const char *format [, argument ]...);printf原型是int printf( const char *format [, argument]...) 。
3、输出不同:fprintf(stdout, "This is a test.\\n");
和printf("This is a test.\\n")。
扩展资料
用法
1、fprintf
#include <cstdio>
#include<cstdlib>
int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值。
2、printf
printf 函数的一般形式为:
int printf(const char *format, [argument]);
以上形式,我们在Visual C++里输入“printf”(将会看到)。
说明printf函数类型为整型,其返回值是整型值。
其值为printf实际控制输出的字符数。
参考资料:百度百科-printf
百度百科-fprintf
fprintf和printf是计算机C语言中的命令符,区别如下:
1.函数原型不同
fprintf的函数原型为:int fprintf( FILE *stream, const char *format, [ argument ]...);
printf的函数原型为:int printf( const char *format [, argument]... );
2.输出目标不同
fprintf向文件输出:fprintf(fp,"%s",name);fp为文件指针。
printf向字符串(buffer)输出:sprintf(buff,"%s",name);buff为字符数组,printf是标准输出流(stdout)的输出函数,向屏幕标准设备输出,相当于:fprintf(stdout,"%s",name)。
3.作用不同:fprintf是用于文件操作的;printf就是在屏幕打印出一段字符串。
参考资料:百度百科-printf
百度百科-fprintf
fprintf和printf是计算机C语言中的命令符,区别如下:
一、函数原型不同
1、fprintf的函数原型为:int fprintf( FILE *stream, const char *format, [ argument ]...);
2、printf的函数原型为:int printf( const char *format [, argument]... );
二、输出目标不同
1、fprintf向文件输出:fprintf(fp,"%s",name);fp为文件指针。
2、printf向字符串(buffer)输出:sprintf(buff,"%s",name);buff为字符数组,printf是标准输出流(stdout)的输出函数,向屏幕标准设备输出,相当于:fprintf(stdout,"%s",name)。
三、用法不同
1、fprintf
#include <stdio.h>
#include<stdlib.h>
int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
2、printf
printf 函数的一般形式为:
int printf(const char *format, [argument]);
以上形式,我们在Visual C++里输入“printf”(将会看到)。
说明printf函数类型为整型,其返回值是整型值。
printf函数实际上是将所有参数按字符输出,根据该函数的参数1(const char *format)。
其值为printf实际控制输出的字符数。
参考资料:百度百科-printf
百度百科-fprintf
哪个更可取 - printf 或 fprintf
【中文标题】哪个更可取 - printf 或 fprintf【英文标题】:Which is preferable - printf or fprintf 【发布时间】:2012-10-27 01:06:31 【问题描述】:我知道这两个函数都可以用来输出到控制台。 我读了that question,但没有人不知道在输出到控制台时更喜欢使用哪个。 那么哪个功能更好,有什么大的区别吗?
【问题讨论】:
这取决于你。你是程序员。您设置首选项。 【参考方案1】:每个进程都有一个名为stdin
的输入流和两个输出流stdout
和stderr
。这些输出流都连接到您的终端,因此以下命令都会将“hello”行打印到您的终端:
printf("hello\n");
fprintf(stdout, "hello\n");
fprintf(stderr, "hello\n");
前两个完全相同,第一个更短更方便。第一种是最常用的。
第三个不同之处在于发送到stderr
的内容与发送到stdout
的内容在逻辑上是分开的。它通常用于您希望用户看到的错误消息。库函数perror
将其错误消息打印到stderr
。
stderr
流在逻辑上分离的意义在于它的内容可以与stdout
分离。例如,假设我们使用命令ls -l
列出一个文件。
$ touch myfile
$ ls -l myfile
-rw-r--r-- 1 wrm staff 0 6 Nov 20:44 myfile
现在,如果我们将ls
的输出重定向到另一个文件,我们会看到以下内容:
$ ls -l myfile > otherfile
$
没有输出输出,因为>
将ls
进程的stdout
流重定向到otherfile
。您可以通过查看otherfile
看到它重定向的输出:
$ cat otherfile
-rw-r--r-- 1 wrm staff 0 6 Nov 20:44 myfile
$
但是>
没有重定向stderr
流。您可以通过删除myfile
并重新运行重定向的ls -l
命令来测试:
$ rm myfile
$ ls -l myfile > otherfile
ls: myfile: No such file or directory
$
所以在这里你可以看到虽然 stdout
被重定向到 otherfile
,stderr
没有被重定向,所以它的内容出现在终端上。还要注意otherfile
现在是空的,因为ls
命令没有找到myfile
,所以没有任何东西可以发送到stdout
。
也可以重定向stderr
,但这取决于您的shell(控制您的终端的程序)如何完成。
【讨论】:
【参考方案2】:引用标准(n1570 中的 7.21.6.3):
printf
函数等效于fprintf
插入参数stdout
在printf
的参数之前。
所以printf
打印到控制台时更方便,否则没有区别。但是fprintf
如果要更改输出目标,修改起来会容易一些。
【讨论】:
不幸的是,情况并非总是如此,ARM v7 LEDE 工具链将绕过 printf,而 fprintf(stdout, ...) 将正常工作。 这意味着它不是一个符合标准的实现,不是吗?【参考方案3】:如果您需要打印到特定的输出流,请使用 fprintf。
如果您需要显示错误消息,请使用 fprintf w/stderr
如果您正在开发命令行可执行文件并且只想向用户显示某些内容,请使用 printf。
【讨论】:
以上是关于fprintf和printf有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章