谁能用简单的英语举例说明printf、fprintf和sprintf之间的区别?
它在哪条小溪里?
在阅读“C语言中的文件处理”时,我真的很困惑这三个。
谁能用简单的英语举例说明printf、fprintf和sprintf之间的区别?
它在哪条小溪里?
在阅读“C语言中的文件处理”时,我真的很困惑这三个。
当前回答
printf
Printf用于在屏幕上执行输出。 语法= printf("控制字符串",参数); 它与文件输入/输出没有关联
流
它用来在file句柄指向的文件中执行写操作的fprintf。 语法是fprintf(文件名,“控制字符串”,参数); 它与文件输入/输出相关联
其他回答
Printf(…)等价于fprintf(stdout,…)。
Fprintf用于输出到流。
Sprintf (buffer,…)用于将字符串格式化为缓冲区。
注意还有vsprintf, vfprintf和vprintf
printf(const char *format, ...) is used to print the data onto the standard output which is often a computer monitor. sprintf(char *str, const char *format, ...) is like printf. Instead of displaying the formated string on the standard output i.e. a monitor, it stores the formated data in a string pointed to by the char pointer (the very first parameter). The string location is the only difference between printf and sprint syntax. fprintf(FILE *stream, const char *format, ...) is like printf again. Here, instead of displaying the data on the monitor, or saving it in some string, the formatted data is saved on a file which is pointed to by the file pointer which is used as the first parameter to fprintf. The file pointer is the only addition to the syntax of printf.
如果在fprintf中使用stdout文件作为第一个参数,那么它的工作将被认为与printf的工作等效。
在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数组,而不是流。
fprintf与流相关,其中printf是一个类似于fprintf的语句,但与流无关,也就是说fprintf是与文件相关的
其他人已经提供了详细的解释;我将通过一个非常基本的示例,将我的回答限制在print与sprintf的实际讨论中。
假设您希望程序同时输出当前行号和文件名。具体来说,您希望:(i)将其打印在屏幕上,(ii)将其保存在变量中,以备将来使用。您可以对(i)使用printf,对(ii)使用sprintf。以下是代码。
/* saves file name and current line in a string and prints it on the screen*/
#include <stdio.h>
int main(void) {
/* note the use of a marco to save the line nr. */
int line_n= __LINE__;
/* note the use of a marco to save the file name */
char file_name[]= __FILE__;
/* Some text you wish to print/save */
char line[] = "Line ";
char file[]= " of file ";
char my_str[100];
/* expand everything and save it in my_str for future use */
sprintf(my_str, "%s%d%s%s", line, line_n, file, file_name);
/* or just print it out on the screen */
printf("%s", my_str);
return 0;
}