Abarbeitung Formatstring printf



  • Guten Tag,

    habe da nochmal eine Frage.

    Folgende Aufgabenstellung:

    Funktionen der printf-Familie benötigen einen Formatstring. Wie funktioniert die Abarbeitung dieses Formatstrings? Sie können eine printf-Anweisung aus dieser Aufgabe als Beispiel verwenden!

    Beispiel wäre dann

    printf("Usage: %s iterations\n", argv[0]);
    

    Jedoch wie funktioniert die Abarbeitung. Ich weiß ja, dass das printf folgendermaßen aufgebaut ist printf(formatstring, Parameter).

    Hat jemand ne Idee?

    MfG


  • Mod

    Was genau meinst du mit Abarbeitung? printf ist eine Funktion mit variabler Argumentliste. Hast du Fragen wie das funktioniert? Dann guck dir mal das hier an. Da, wie dort erklärt wird, der Typ der Argumente verloren geht, braucht printf die Typinformation, die dann im Formatstring codiert wird. Hast du Fragen, wie das abläuft? Das ist einfache Zeichenkettenverarbeitung, da weiß ich nicht, was es da groß zu erklären gibt, wenn du keine präzise Frage stellst.



  • tobias321 schrieb:

    Folgende Aufgabenstellung:

    Funktionen der printf-Familie benötigen einen Formatstring. Wie funktioniert die Abarbeitung dieses Formatstrings? Sie können eine printf-Anweisung aus dieser Aufgabe als Beispiel verwenden!

    Beispiel wäre dann

    printf("Usage: %s iterations\n", argv[0]);
    

    Grundsätzlich erledigt hier keiner Deine Übungen.

    Wenn die Aufgabe zu abstrakt ist:
    Versuch selber eine Funktion zu schreiben, die auf einem Formatstring arbeitet und stell konkrete Fragen, wenn Du dabei auf Probleme stößt.

    Problematisch wird evtl. der Umgang mit variablen Argumenten sein (das ... in der Deklaration von int printf(const char *format, ...); ).
    Daher würde ich vorschlagen Deine Funktion unterscheidet nur %s und %i und hat folgende Deklaration void my_printf(const char *format, const void *value);

    Also:

    void my_printf(const char *format, const void *value);
    
    int main(void){
      int i = 42;
      my_printf("Int: %i", &i); // Ausgabe: Int: 42
      const char* s = "Hallo, Welt!";
      my_printf("\"%s\"", s); // Ausgabe: "Hallo, Welt!"
    }
    

Log in to reply