putchar() vs printf() – Gibt es einen Unterschied?

Lesezeit: 4 Minuten

Ich bin gerade in Kapitel 1.5.1 Datei kopieren und habe ein Programm wie folgt erstellt:

#include <stdio.h>

/* copy input to output; 1st version */
main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

Wenn ich es so laufen lasse:

PS <..loc..> cc copy-0.c
PS ./a
Black
Black
White
White
Gray
Gray

Die Ausgabe ist das, was ich eingebe.

Und hier ist ein Programm, das ich zu experimentellen Zwecken erstellt habe:

#include <stdio.h>

/* copy input to output; 1st version */
main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        printf("%c",c);
        c = getchar();
    }
}

Es erzeugt das gleiche Ergebnis, aber gibt es einen Unterschied zwischen putchar und printf?

Was ist besser zwischen den 2 zu verwenden?

  • printf("%c, c); und putchar(c); haben in diesem Beispiel identisches Verhalten.

    – MM

    20. Mai 2014 um 2:35 Uhr

  • printf("%c, c) und putchar(c) Funktion die gleiche, außer dass sich der Rückgabewert unterscheidet – der in diesem Beispiel nicht verwendet wird. putchar(c) wird sicherlich schneller als ausführen printf("%c, c). Der Grad der Geschwindigkeitsdifferenz hängt stark von vielen anderen Faktoren ab.

    – chux – Wiedereinsetzung von Monica

    20. Mai 2014 um 18:25 Uhr

  • @chux Warum wäre putchar schnell und warum ist putchar_unlocked schneller?

    – Suraj Jain

    4. März 2017 um 9:30 Uhr

  • @SurajJain Ein optimierender Compiler kann denselben Code für ausgeben printf("%c, c) und putchar(c) und daher kein Leistungsunterschied in diesem Fall. Mit einem weniger intelligenten Compiler putchar(c)mit seiner einfachen Funktionalität wäre sicherlich schneller als printf("%c, c)obwohl ohne Tests der Grad der Geschwindigkeitsdifferenz unbekannt ist und marginal sein kann. putchar_unlocked() ist keine Standard-C-Bibliotheksfunktion – ich bin mit ihren Details nicht vertraut.

    – chux – Wiedereinsetzung von Monica

    4. März 2017 um 16:18 Uhr

Benutzeravatar von kirbyfan64sos
kirbyfan64sos

printf ist eine generische Druckfunktion, die mit 100 verschiedenen Formatbezeichnern arbeitet und die richtige Ergebniszeichenfolge druckt. putchar, nun ja, bringt einen Charakter auf den Bildschirm. Das bedeutet auch, dass es wahrscheinlich viel schneller ist.

Zurück zur Frage: nutzen putchar um ein einzelnes Zeichen zu drucken. Auch hier ist es wahrscheinlich viel schneller.

  • Ebenfalls putchar() ist kürzer. In kann helfen, wenn Sie Golf spielen.

    – aloisdg

    16. Juli 2016 um 21:23 Uhr

  • “putchar bringt einen Charakter auf den Bildschirm” ist bestenfalls schlampig und schlimmstenfalls ein schweres Missverständnis. Die gepufferten Ausgabefunktionen wissen nichts von “Bildschirmen”; Sie sind sich jeglicher spezifischer Hardware völlig unbewusst. Das putc Makro enthält Code, der ein Zeichen in einen Stream einfügt. Diese Abstraktion ist die Schönheit der *nix (inspirierten) Betriebssysteme und Laufzeitbibliotheken und der Grund, warum Sie die Ausgabe eines Programms an die Eingabe eines anderen leiten oder Server ohne physische Terminals ausführen können.

    – Peter – Setzen Sie Monica wieder ein

    24. Mai 2019 um 13:16 Uhr


Benutzeravatar von user5181136
Benutzer5181136

Ich habe ein Beispiel mit kompiliert printf("a") mit -S und Anruf bekommen putchar im Assemblercode.

Sieht so aus, als hätten Sie nur ein Zeichen in der printf der Compiler macht daraus eine putchar().

Ich habe ein weiteres Beispiel mit gemacht printf("ab") und Anruf bekommen printfmit dem Textabschnitt im %edi-Register.

  • Welche Plattform und welchen Compiler hast du verwendet?

    – Aaron D

    1. August 2015 um 16:54 Uhr

  • @AaronD Diese Optimierung wird von Clang 3.0 und höher und GCC 4.9 und höher durchgeführt.

    – kirbyfan64sos

    18. Oktober 2015 um 19:25 Uhr

  1. Putchar : gibt nur ein einzelnes Zeichen auf dem Bildschirm aus, wie die Syntax sagt.
  2. Printf : printf Zeile oder Wort auf dem Bildschirm. Wenn Sie also nur ein Zeichen auf dem Bildschirm anzeigen möchten, verwenden Sie putchar. Um einen String zu lesen, verwenden Sie die Funktion gets. Um eine Zeichenfolge anzuzeigen, können Sie sowohl puts() als auch printf verwenden.

Benutzeravatar von Tommy Ivarsson
Tommi Ivarsson

Der Unterschied ist das putchar druckt ein Zeichen, während printf kann viel mehr drucken.

printf("%s\n", "this is a lot longer than one character");

Wenn Sie etwas an das Terminal drucken, möchten Sie es im Allgemeinen mit einem Zeilenumbruchzeichen beenden. '\n'. Zumindest aus diesem Grund würde ich die Verwendung empfehlen printf wie du dann schreiben kannst

printf("%c\n", c);

Anstatt von

putchar(c);
putchar('\n');

Mit printf können Sie Zeichenfolgen auf komplizierte Weise formatieren, indem Sie Dinge wie Ganzzahlen und Floats und andere Zeichenfolgen ersetzen.

getchar und putchar erhalten und setzen Zeichen

Ich kann sagen, dass printf im Vergleich zu putchar in vielerlei Hinsicht nützlicher ist.

Schauen Sie besser in den entsprechenden Handbuchseiten ( man 3 printf man 3 putchar ) im Terminal nach

1432870cookie-checkputchar() vs printf() – Gibt es einen Unterschied?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy