www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik "besseres" printf


Autor: Ratlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
int printf( const char *format ,)
 um in
int Ausgabe( const char *format ,)

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

-- Mach in der Ausgabe() irgendwas mit deinen Parametern. Der "alte" 
printf-Teil bleibt gleich.

Autor: Maria (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal zu den Hilfsfunktionen:

va_start()
va_arg()
va_end()

Diese verarbeiten variable Parameterlisten.

Autor: Eddy Current (chrisi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nene, ein klarer Fall für vsprintf :-)

Autor: Martin (Gast)
Datum:

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

Autor: Ratlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst die zwei printfs doch auch in eine eigene Funktion packen.

Autor: Ratlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat mit vsprintf() wunderbar geklappt. Ich danke euch!

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.