Forum: Mikrocontroller und Digitale Elektronik "besseres" printf


von Ratlos (Gast)


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!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Maria (Gast)


Lesenswert?

Schau mal zu den Hilfsfunktionen:

va_start()
va_arg()
va_end()

Diese verarbeiten variable Parameterlisten.

von Eddy C. (chrisi)


Lesenswert?

Nene, ein klarer Fall für vsprintf :-)

von Martin (Gast)


Lesenswert?

Versteh ich nicht. Wieso benutzt du nicht mehrere printf's 
hintereinander ?

von Ratlos (Gast)


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

von Martin (Gast)


Lesenswert?

Du kannst die zwei printfs doch auch in eine eigene Funktion packen.

von Ratlos (Gast)


Lesenswert?

Hat mit vsprintf() wunderbar geklappt. Ich danke euch!

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Ratlos wrote:

> 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.

man 3 va_arg

von Simon K. (simon) Benutzerseite


Lesenswert?

Michael G. wrote:
> Ratlos wrote:
>
>> 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.
>
> man 3 va_arg

Komisch, geht gar nicht in der Windows Konsole.

http://www.manpagez.com/man/3/va_arg/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.