fprintf,printf和sprintf之间的区别?

mr_*_*air 206 c io printf stream

任何人都可以用简单的英语有关之间的差异说明printf, fprintf以及sprintf结合实例?

它是什么流?

在阅读"C中的文件处理"时,我对其中的三个感到困惑.

Joh*_*ode 220

在C中,"流"是一种抽象; 从程序的角度来看,它只是字节的生产者(输入流)或消费者(输出流).它可以对应于磁盘上的文件,管道,终端或某些其他设备(如打印机或tty).该FILE类型包含有关流的信息.通常,您不会FILE直接弄乱对象的内容,只需将指针传递给各种I/O例程即可.

有三个标准流:stdin是指向标准输入流stdout的指针,是指向标准输出流stderr的指针,是指向标准错误输出流的指针.在交互式会话中,三者通常会引用您的控制台,但您可以将它们重定向到指向其他文件或设备:

$ myprog < inputfile.dat > output.txt 2> errors.txt
Run Code Online (Sandbox Code Playgroud)

在此示例中,stdin现在指向inputfile.dat,stdout指向output.txtstderr指向errors.txt.

fprintf 将格式化文本写入您指定的输出流.

printf相当于fprintf(stdout, ...)将格式化文本写入并写入标准输出流当前指向的位置.

sprintf将格式化文本写入数组char,而不是流.

  • @DaveVoyles:这些都是从你的程序的角度来看的.输入流产生字节供程序读取; 输出流消耗程序生成的字节. (6认同)
  • "它只是字节的生产者(输入流)或消费者(输出流)." 这些倒退了吗?生产者不会创造(输出)某些东西吗?问因为我真的不知道. (4认同)
  • 对于任何想知道“f”前缀/后缀的用途的人。我最初以为 `printf` / `sprintf` / `scanf` 中的 `f` 意味着 _file_。但这只是_格式_的意思。 (4认同)

Moo*_*ice 147

printf输出到标准输出流(stdout)

fprintf转到文件句柄(FILE*)

sprintf转到你分配的缓冲区.(char*)


Rub*_*bal 31

printf("format",args)用于将数据打印到标准输出上,标准输出通常是计算机监视器.

sprintf(char*,"format",args)就像printf.而是在标准输出(即监视器)上显示格式化字符串,它将格式化数据存储在char指针指向的字符串中(第一个参数).字符串位置是printf和sprint语法之间的唯一区别.

fprintf(FILE*fp,"format",args)再次像printf.这里不是在监视器上显示数据,或者将其保存在某个字符串中,而是将格式化数据保存在文件指针所指向的文件中,该文件指针用作fprintf的第一个参数.文件指针是printf语法的唯一补充.

如果将stdout文件用作fprintf中的第一个参数,则其工作被认为与printf的工作相同.


VGE*_*VGE 24

printf(...)相当于fprintf(stdout,...).

fprintf 用于输出流.

sprintf(buffer,...) 用于将字符串格式化为缓冲区.

注意还有vsprintf,vfprintfvprintf

  • "v"风味在C标准中非常肯定. (8认同)