fprintf,printf和sprintf之间的区别?

时间:2011-01-07 15:49:47

标签: c io stream printf

任何人都可以用简单的英语解释printffprintfsprintf与示例之间的差异吗?

它是什么流?

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

8 个答案:

答案 0 :(得分:211)

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

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

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

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

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

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

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

答案 1 :(得分:138)

printf输出到标准输出流(stdout

fprintf转到文件句柄(FILE*

sprintf转到您分配的缓冲区。 (char*

答案 2 :(得分:26)

printf (“format”,args)用于将数据打印到标准输出上,标准输出通常是计算机显示器。

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

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

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

答案 3 :(得分:21)

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

fprintf用于输出流。

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

请注意,还有vsprintfvfprintfvprintf

答案 4 :(得分:2)

您还可以使用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)

答案 5 :(得分:2)

的printf

  1. printf用于在屏幕上执行输出。
  2. syntax = printf("control string ", argument );
  3. 它与文件输入/输出无关
  4. fprintf中

    1. 用于在FILE句柄指向的文件中执行写入操作的fprintf。
    2. 语法为fprintf (filename, "control string ", argument );
    3. 与文件输入/输出相关联

答案 6 :(得分:0)

fprintf这与流相关,其中printf是类似于fprintf的语句但与流无关,即fprintf与文件相关

答案 7 :(得分:0)

sprintf:将格式化数据写入内存中的字符串而不是stdout

sprintf的语法是:

#include <stdio.h>
int sprintf (char *string, const char *format
[,item [,item]…]);

下面,

String指的是指向要写入数据的内存缓冲区的指针。

格式是指指向定义格式的字符串的指针。

每个项目都是一个变量或表达式,用于指定要写入的数据。

如果操作成功,则sprintf返回的值大于或等于零,或者换句话说,返回写入的字符数,不计算终止空字符,如果发生错误则返回小于零的值。

printf:打印到stdout

printf的语法是:

printf format [argument]…

sprintf()和printf()之间的唯一区别是sprintf()将数据写入字符数组,而printf()将数据写入标准输出设备stdout。