谁能用简单的英语举例说明printf、fprintf和sprintf之间的区别?
它在哪条小溪里?
在阅读“C语言中的文件处理”时,我真的很困惑这三个。
谁能用简单的英语举例说明printf、fprintf和sprintf之间的区别?
它在哪条小溪里?
在阅读“C语言中的文件处理”时,我真的很困惑这三个。
当前回答
printf
Printf用于在屏幕上执行输出。 语法= printf("控制字符串",参数); 它与文件输入/输出没有关联
流
它用来在file句柄指向的文件中执行写操作的fprintf。 语法是fprintf(文件名,“控制字符串”,参数); 它与文件输入/输出相关联
其他回答
fprintf与流相关,其中printf是一个类似于fprintf的语句,但与流无关,也就是说fprintf是与文件相关的
在C语言中,“流”是一种抽象;从程序的角度来看,它只是字节的生产者(输入流)或消费者(输出流)。它可以对应于磁盘上的文件、管道、终端或打印机或tty等其他设备。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数组,而不是流。
你也可以用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输出到标准输出流(stdout)
fprintf转到文件句柄(file *)
Sprintf进入您分配的缓冲区。(char *)
printf
Printf用于在屏幕上执行输出。 语法= printf("控制字符串",参数); 它与文件输入/输出没有关联
流
它用来在file句柄指向的文件中执行写操作的fprintf。 语法是fprintf(文件名,“控制字符串”,参数); 它与文件输入/输出相关联