wake-up-neo.net

Unterschied zwischen fprintf, printf und sprintf?

Kann jemand auf einfache Weise die Unterschiede zwischen printf, fprintf und sprintf anhand von Beispielen erklären?

In welchem ​​Strom ist es?

Ich bin wirklich verwirrt zwischen den dreien, während ich über "File Handling in C" lese.

181
mr_eclair

In C ist ein "Strom" eine Abstraktion; Aus Sicht des Programms handelt es sich lediglich um einen Erzeuger (Eingangsstrom) oder einen Verbraucher (Ausgangsstrom) von Bytes. Sie kann einer Datei auf der Festplatte, einer Pipe, Ihrem Terminal oder einem anderen Gerät wie einem Drucker oder einem Drucker entsprechen. Der Typ FILE enthält Informationen zum Stream. Normalerweise verwirren Sie den Inhalt eines FILE-Objekts nicht direkt, sondern geben einfach einen Zeiger auf die verschiedenen E/A-Routinen weiter. 

Es gibt drei Standardströme: stdin ist ein Zeiger auf den Standardeingabestrom, stdout ist ein Zeiger auf den Standardausgabestrom und stderr ist ein Zeiger auf den Standardfehlerausgabestrom. In einer interaktiven Sitzung beziehen sich die drei normalerweise auf Ihre Konsole, obwohl Sie sie umleiten können, um auf andere Dateien oder Geräte zu verweisen:

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

In diesem Beispiel zeigt stdin jetzt auf inputfile.dat, stdout zeigt auf output.txt und stderr zeigt auf errors.txt

fprintf schreibt formatierten Text in den von Ihnen angegebenen Ausgabestrom. 

printf entspricht dem Schreiben von fprintf(stdout, ...) und schreibt formatierten Text dorthin, wo der Standardausgabestream gerade zeigt.

sprintf schreibt formatierten Text im Gegensatz zu einem Stream in ein Array von char

205
John Bode

printf gibt an den Standard-Ausgabestrom aus (stdout)

fprintf wechselt zu einem Dateihandle (FILE*)

sprintf geht in einen von Ihnen zugewiesenen Puffer. (char*)

135
Moo-Juice

printf ("format", args) wird zum Drucken der Daten auf die Standardausgabe verwendet, bei der es sich häufig um einen Computermonitor handelt. 

sprintf (char *, "format", args) ist wie printf. Anstelle der Anzeige der formatierten Zeichenfolge auf der Standardausgabe, d. H. Einem Monitor, werden die formatierten Daten in einer Zeichenfolge gespeichert, auf die der Zeichenzeiger (der allererste Parameter) zeigt. Die Zeichenfolge ist der einzige Unterschied zwischen der Syntax von printf und Sprint.

fprintf (FILE * fp, "format", args) ist wieder wie printf. Statt die Daten auf dem Monitor anzuzeigen oder in einem String zu speichern, werden die formatierten Daten in einer Datei gespeichert, auf die der Dateizeiger zeigt, der als erster Parameter für fprintf verwendet wird. Der Dateizeiger ist die einzige Ergänzung zur Syntax von printf.

Wenn die Datei stdout als erster Parameter in fprintf verwendet wird, wird ihre Funktionsweise als äquivalent zu printf angesehen.

24
Rubal

printf(...) entspricht fprintf(stdout,...).

fprintf wird zur Ausgabe an Streams verwendet.

sprintf(buffer,...) wird verwendet, um eine Zeichenfolge in einem Puffer zu formatieren.

Beachten Sie, dass es auch vsprintf, vfprintf und vprintf gibt.

20
VGE

printf

  1. printf dient zur Ausgabe auf dem Bildschirm.
  2. syntax = printf("control string ", argument );
  3. Es ist nicht mit der Dateieingabe/-ausgabe verknüpft

fprintf

  1. Die fprintf, die zum Ausführen der Schreiboperation in der Datei verwendet wurde, auf die der FILE-Handle verweist.
  2. Die Syntax lautet fprintf (filename, "control string ", argument );
  3. Es ist mit der Dateieingabe/-ausgabe verknüpft
2
Amit Vasava

Mit der Funktion vsnprintf () können Sie auch sehr nützliche Dinge tun:

$ 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)
2

fprintf Dies bezieht sich auf Streams, bei denen printf eine Anweisung ähnlich wie fprintf ist, die jedoch nicht mit Streams zusammenhängt, dh fprintf ist dateibezogen

0
kavamsi12

sprintf: Schreibt formatierte Daten in eine Zeichenfolge im Speicher anstatt in stdout

Die Sprintf-Syntax lautet:

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

Hier,

String bezieht sich auf den Zeiger auf einen Puffer im Speicher, in den die Daten geschrieben werden sollen.

Format bezieht sich auf einen Zeiger auf eine Zeichenfolge, die das Format definiert.

Jedes Element ist eine Variable oder ein Ausdruck, der die zu schreibenden Daten angibt.

Der von sprintf zurückgegebene Wert ist größer oder gleich Null, wenn die Operation erfolgreich ist, oder die Anzahl der geschriebenen Zeichen, wobei das abschließende Nullzeichen nicht gezählt wird, und es wird ein Wert zurückgegeben, der kleiner als Null ist, wenn ein Fehler aufgetreten ist.

printf: Druckt in stdout

Die Syntax für printf lautet:

printf format [argument]…

Der einzige Unterschied zwischen sprintf () und printf () besteht darin, dass sprintf () Daten in ein Zeichenarray schreibt, während printf () Daten in stdout, das Standardausgabegerät, schreibt.

0
Fahad Ali