"besseres" printf

Gast #1006456
Lesenswert?

Hallo,

der Titel ist ein bisschen blöd gewählt, aber ich weiß nicht wie ich es 
besser ausdrücken soll. Ihr werdet (hoffentlich) nach Lesen des Textes 
herausfinden was ich erreichen möchte.

Mein Ziel ist das Erreichen folgender Syntax:

void Ausgabe(char param1,char param2, "Textxyz%d",var1);

param1, param2....Parameter
"Textxyz%d"....beliebiger Text
var1... Variable

Also im Prinzip soll die Funktion genauso aussehen und arbeiten wie die 
Fkt. printf() mit der Möglichkeit zusätzlich zwei Parameter(in meinem 
Fall sind das Adressen) anzugeben.
Doch wie kann ich das am ehesten bewerkstelligen? Wenn es nur ein 
einfacher Text wäre, dann könnte man das diesen ja einfach in einen 
String schreiben und dann Zeichen für Zeichen aus dem String rausholen. 
Aber dann würde ich die Möglichkeit der formatierten 
Ausgabe(%d,%f...etc) verlieren...
Mit der Fkt. sprintf() kann ich meines Erachtens auch nicht arbeiten, da 
ich ja nicht weiß wieviele Variablen man der Fkt übergibt?
Hat da jemand eine Idee wie man das Lösen könnte?

Danke!
Moderator (Firma: Titel) Persönliche Seite #1006488
Lesenswert?

Da gibt es mehrere Methoden. Die einfachste und handwerklichste dürfte 
eine Erweiterung von printf() sein:

-- Sieh dir printf() im Quellcode der Library an.

-- Kopiere die Funktion.

-- Benenne die Funktion
1
int printf( const char *format ,)
 um in
1
int Ausgabe( const char *format ,)

-- Schreibe an den Anfang der Parameterliste der neuen Ausgabe deine 
zwei zusätzlichen Parameter
1
int Ausgabe( char param1, char param2, const char *format ,)

-- Mach in der Ausgabe() irgendwas mit deinen Parametern. Der "alte" 
printf-Teil bleibt gleich.
Gast #1006766
Lesenswert?

Zwei printf's find ich irgendwie unpraktisch. Hätte das lieber in einer 
Funktion vereint. Ich werde mal den Ansatz mit dem Quellcode und 
vsprintf() weiter verfolgen.

Danke für die Tipps.

Ich melde mich wieder

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren