fprintf,printf和sprintf之间的区别?

任何人都可以用简单的英语解释printffprintfsprintf与例子之间的区别吗?

它在哪里?

在阅读“C中的文件处理”时,我对这三者之间真的感到困惑。

在C中,“stream”是一个抽象; 从程序的angular度来看,它只是一个生产者(inputstream)或消费者(输出stream)的字节。 它可以对应磁盘上的文件,pipe道,terminal或其他设备,如打印机或tty。 FILEtypes包含有关stream的信息。 通常情况下,您不要直接FILE对象的内容,只需将指针传递给各种I / O例程即可。

有三种标准stream: stdin是指向标准inputstream的指针, stdout是指向标准输出stream的指针, stderr是指向标准错误输出stream的指针。 在交互式会话中,三者通常会引用您的控制台,尽pipe您可以将它们redirect到指向其他文件或设备:

 $ myprog < inputfile.dat > output.txt 2> errors.txt 

在这个例子中, stdin现在指向inputfile.datstdout指向output.txtstderr指向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格式化为缓冲区。

注意还有vsprintfvfprintfvprintf

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

  1. printf用于在屏幕上执行输出。
  2. 语法= printf("control string ", argument );
  3. 它不与文件input/输出关联

fprintf中

  1. 它用于在FILE句柄指向的文件中执行写操作的fprintf。
  2. 语法是fprintf (filename, "control string ", argument );
  3. 它与文件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(标准输出设备)。