fprintf,printf和sprintf之间的区别?
任何人都可以用简单的英语解释printf
, fprintf
和sprintf
与例子之间的区别吗?
它在哪里?
在阅读“C中的文件处理”时,我对这三者之间真的感到困惑。
在C中,“stream”是一个抽象; 从程序的angular度来看,它只是一个生产者(inputstream)或消费者(输出stream)的字节。 它可以对应磁盘上的文件,pipe道,terminal或其他设备,如打印机或tty。 FILE
types包含有关stream的信息。 通常情况下,您不要直接FILE
对象的内容,只需将指针传递给各种I / O例程即可。
有三种标准stream: stdin
是指向标准inputstream的指针, stdout
是指向标准输出stream的指针, stderr
是指向标准错误输出stream的指针。 在交互式会话中,三者通常会引用您的控制台,尽pipe您可以将它们redirect到指向其他文件或设备:
$ myprog < inputfile.dat > output.txt 2> errors.txt
在这个例子中, stdin
现在指向inputfile.dat
, stdout
指向output.txt
, stderr
指向errors.txt
。
fprintf
将格式化文本写入您指定的输出stream。
printf
相当于写入fprintf(stdout, ...)
并将格式化文本写入标准输出stream当前指向的任何位置。
sprintf
将格式化文本写入char
数组,而不是stream。
printf
输出到标准输出stream( stdout
)
fprintf
进入文件句柄( FILE*
)
sprintf
进入你分配的缓冲区。 ( char*
)
printf(...)
等价于fprintf(stdout,...)
。
fprintf
用于输出到stream。
sprintf(buffer,...)
用于将string格式化为缓冲区。
注意还有vsprintf
, vfprintf
和vprintf
printf (“format”,args)用于将数据打印到通常是计算机显示器的标准输出上。
sprintf (char *,“format”,args)就像printf。 而是在标准输出(即监视器)上显示格式化的string,而是将格式化的数据存储在由char指针指向的string中(第一个参数)。 string位置是printf和sprint语法之间的唯一区别。
fprintf (FILE * fp,“format”,args)就像printf一样。 在这里,将数据显示在监视器上,或者将其保存在一些string中,将格式化的数据保存在文件指针所指向的文件上,该文件指针用作fprintf的第一个参数。 文件指针是printf语法的唯一补充。
如果使用stdout文件作为fprintf中的第一个参数,那么它的工作就等同于printf的工作。
你也可以用vsnprintf()函数做很有用的事情:
$ cat test.cc #include <exception> #include <stdarg.h> #include <stdio.h> struct exception_fmt : std::exception { exception_fmt(char const* fmt, ...) __attribute__ ((format(printf,2,3))); char const* what() const throw() { return msg_; } char msg_[0x800]; }; exception_fmt::exception_fmt(char const* fmt, ...) { va_list ap; va_start(ap, fmt); vsnprintf(msg_, sizeof msg_, fmt, ap); va_end(ap); } int main(int ac, char** av) { throw exception_fmt("%s: bad number of arguments %d", *av, ac); } $ g++ -Wall -o test test.cc $ ./test terminate called after throwing an instance of 'exception_fmt' what(): ./test: bad number of arguments 1 Aborted (core dumped)
的printf
- printf用于在屏幕上执行输出。
- 语法=
printf("control string ", argument );
- 它不与文件input/输出关联
fprintf中
- 它用于在FILE句柄指向的文件中执行写操作的fprintf。
- 语法是
fprintf (filename, "control string ", argument );
- 它与文件input/输出相关联
fprintf
这与streamprintf
是一个类似于fprintf
但与stream无关的语句,即fprintf
是文件相关
sprintf:将格式化数据写入内存中的string而不是stdout
sprintf的语法是:
#include <stdio.h> int sprintf (char *string, const char *format [,item [,item]…]);
这里,
string是指指向要写入数据的内存中的缓冲区的指针。
格式是指指向定义格式的string的指针。
每个项目是指定要写入的数据的variables或expression式。
如果操作成功,或者换句话说,写入的字符数(不计算终止空字符),则sprintf返回的值大于或等于零,如果发生错误,则返回小于零的值。
printf:打印到标准输出
printf的语法是:
printf format [argument]…
sprintf()和printf()之间的唯一区别是sprintf()将数据写入字符数组,而printf()将数据写入stdout(标准输出设备)。