Verschil tussen fprintf, printf en sprintf?

Kan iemand in eenvoudig Engels uitleggen wat de verschillen zijn tussen printf, fprintfen sprintfmet voorbeelden?

In welke stream zit het?

Ik ben echt in de war tussen deze drie tijdens het lezen over “Bestandsverwerking in C”.


Antwoord 1, autoriteit 100%

In C is een “stroom” een abstractie; vanuit het perspectief van het programma is het gewoon een producent (invoerstroom) of consument (uitvoerstroom) van bytes. Het kan overeenkomen met een bestand op schijf, met een pijp, met uw terminal of met een ander apparaat zoals een printer of tty. Het type FILEbevat informatie over de stream. Normaal gesproken knoei je niet direct met de inhoud van een FILEobject, je geeft er gewoon een verwijzing naar door aan de verschillende I/O-routines.

Er zijn drie standaard streams: stdinis een verwijzing naar de standaard invoerstroom, stdoutis een verwijzing naar de standaard uitvoerstroom en stderris een verwijzing naar de standaardfoutuitvoerstroom. In een interactieve sessie verwijzen de drie meestal naar uw console, hoewel u ze kunt omleiden om naar andere bestanden of apparaten te verwijzen:

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

In dit voorbeeld verwijst stdinnu naar inputfile.dat, stdoutverwijst naar output.txt, en stderrverwijst naar errors.txt.

fprintfschrijft opgemaakte tekst naar de uitvoerstroom die u opgeeft.

printfis gelijk aan het schrijven van fprintf(stdout, ...)en schrijft opgemaakte tekst naar waar de standaard uitvoerstroom momenteel naar wijst.

sprintfschrijft opgemaakte tekst naar een array van char, in tegenstelling tot een stream.


Antwoord 2, autoriteit 63%

printfvoert uit naar de standaard uitvoerstroom (stdout)

fprintfgaat naar een bestandsingang (FILE*)

sprintfgaat naar een buffer die je hebt toegewezen. (char*)


Antwoord 3, autoriteit 17%

printf(“format”, args) wordt gebruikt om de gegevens af te drukken op de standaarduitvoer, wat vaak een computermonitor is.

sprintf(char *, “format”, args) is als printf. In plaats van de geformatteerde string weer te geven op de standaarduitvoer, d.w.z. een monitor, slaat het de geformatteerde gegevens op in een string waarnaar wordt verwezen door de char-aanwijzer (de allereerste parameter). De stringlocatie is het enige verschil tussen printf en sprint syntax.

fprintf(FILE *fp, “format”, args) is weer zoals printf. Hier, in plaats van de gegevens op de monitor weer te geven, of op te slaan in een string, worden de geformatteerde gegevens opgeslagen in een bestand waarnaar wordt verwezen door de bestandsaanwijzer die wordt gebruikt als de eerste parameter voor fprintf. De bestandsaanwijzer is de enige toevoeging aan de syntaxis van printf.

Als het bestand stdoutwordt gebruikt als de eerste parameter in fprintf, wordt de werking ervan beschouwd als gelijkwaardig aan die van printf.


Antwoord 4, autoriteit 10%

printf(...)is gelijk aan fprintf(stdout,...).

fprintfwordt gebruikt om te streamen.

sprintf(buffer,...)wordt gebruikt om een string op te maken in een buffer.

Let op: er zijn ook vsprintf, vfprintfen vprintf


Antwoord 5

Je kunt ook heel nuttige dingen doen met de vsnprintf()-functie:

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

Antwoord 6

printf

  1. printf wordt gebruikt om uitvoer op het scherm uit te voeren.
  2. syntaxis = printf("control string ", argument );
  3. Het is niet geassocieerd met Bestandsinvoer/uitvoer

fprintf

  1. De fprintf die het gebruikte om de schrijfbewerking uit te voeren in het bestand waarnaar wordt verwezen door de FILE-handle.
  2. De syntaxis is fprintf (filename, "control string ", argument );
  3. Het wordt geassocieerd met invoer/uitvoer van bestanden

Antwoord 7

fprintfDit is gerelateerd aan streams waarbij als printfeen statement is vergelijkbaar met fprintfmaar niet gerelateerd aan streams, dat wil zeggen fprintfis bestand gerelateerd


Antwoord 8

sprintf: schrijft geformatteerde gegevens naar een tekenreeks in het geheugen in plaats van stdout

Syntaxis van sprintf is:

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

Hier,

String verwijst naar de aanwijzer naar een buffer in het geheugen waar de gegevens moeten worden geschreven.

Formaat verwijst naar een aanwijzer naar een tekenreeks die het formaat definieert.

Elk item is een variabele of uitdrukking die de te schrijven gegevens specificeert.

De waarde die wordt geretourneerd door sprintf is groter dan of gelijk aan nul als de bewerking succesvol is of met andere woorden het aantal geschreven tekens, het afsluitende null-teken niet meegerekend, wordt geretourneerd en retourneert een waarde kleiner dan nul als er een fout is opgetreden.

printf: Afdrukken naar stdout

Syntaxis voor printf is:

printf format [argument]…

Het enige verschil tussen sprintf() en printf() is dat sprintf() gegevens naar een tekenreeks schrijft, terwijl printf() gegevens schrijft naar stdout, het standaard uitvoerapparaat.

Other episodes