任何人都可以用简单的英语有关之间的差异解释printf
, fprintf
,和sprintf
举例?
什么流是哪个?
我真的在这三个之间的混淆一边念叨“文件用C处理”。
任何人都可以用简单的英语有关之间的差异解释printf
, fprintf
,和sprintf
举例?
什么流是哪个?
我真的在这三个之间的混淆一边念叨“文件用C处理”。
在C中,“流”是一种抽象; 从程序的角度来看,这是简单地字节的生产者(输入流)或消费者(输出流)。 它可以对应于磁盘上的文件,以一个管道,到终端,或某一其它装置如打印机或终端。 该FILE
类型包含有关流的信息。 通常情况下,你做一个不要乱FILE
对象的内容直接,你只是一个指针,它传递到各个I / O例程。
有三个标准流: stdin
是一个指向标准输入流, stdout
是一个指针到标准输出流,并且stderr
是一个指针到标准错误输出流。 在互动环节,这三个通常是指到控制台,虽然你可以重定向它们指向其它文件或设备:
$ myprog < inputfile.dat > output.txt 2> errors.txt
在这个例子中, stdin
现在指向inputfile.dat
, stdout
点output.txt
和stderr
指向errors.txt
。
fprintf
写入格式的文本到指定的输出流。
printf
等同于书写fprintf(stdout, ...)
和写入格式的文本到哪里标准输出流当前指向。
sprintf
写入格式化的文本的阵列char
,而不是流。
printf
输出到标准输出流( stdout
)
fprintf
去的文件句柄( FILE*
)
sprintf
归你分配的缓冲区。 ( char*
)
的printf(“格式”,参数)被用于打印数据到标准输出这常常是计算机监视器。
sprintf的 (字符*, “格式”,参数)是如printf。 代替上即在监视器的标准输出显示格式化的字符串,它存储在一个串中的格式化数据由字符指针(非常第一参数)指向。 字符串位置是printf和冲刺语法之间的唯一区别。
fprintf中 (FILE * FP, “格式”,参数)是如printf一次。 这里上,而不是显示在监视器上的数据,或将其保存在某些字符串,该格式化的数据被保存在其上通过其被用作到fprintf中的第一个参数的文件指针指向一个文件。 文件指针是唯一除了对printf的语法。
如果stdout文件用作fprintf中的第一个参数,它的工作是那么认为相当于printf函数。
printf(...)
等同于fprintf(stdout,...)
fprintf
用于输出到流。
sprintf(buffer,...)
用于格式化的字符串的缓冲区。
请注意,还有vsprintf
, vfprintf
和vprintf
你也可以做的非常有用的东西与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("control string ", argument );
fprintf中
fprintf (filename, "control string ", argument );
fprintf
这是用流,其中为相关printf
类似声明fprintf
涉及到流,但不是,那是fprintf
的相关文件
的sprintf:写入格式化的数据为字符串在存储器而不是标准输出
sprintf的语法是:
#include <stdio.h>
int sprintf (char *string, const char *format
[,item [,item]…]);
这里,
串指指向缓冲区的指针在存储器,其中数据将被写入。
格式是指指针指向字符串定义的格式。
每个项目是一个变量或表达式中指定要写入数据。
通过sprintf的返回的值大于或等于零,如果操作成功或换言之字符数写入,不计算终止空字符被返回并返回一个值小于零,如果出现了错误。
printf的:打印到stdout
语法的printf是:
printf format [argument]…
的sprintf()和printf()之间的唯一区别是的sprintf()的数据写入到一个字符阵列,而printf()的数据写入到标准输出,标准输出设备。