mikrocontroller.net

Forum: Compiler & IDEs #defines im sprintf - Formatter


Autor: Gerd S. (gerd_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,
ich möchte solchen Code bauen :

    sprintf (buf, "%05d", nr);

Die '5' im Formatter soll sich per #define ändern. Also so was:

#define LEN sizeof(somebuf)

    sprintf (buf, "%0"LEN"d", nr);

Geht natürlich so nicht.

Sicher kann man den gesamten Formatter per define deklarieren. Nur 
dieses #define wird an vielen Stellen im Code verwendet, deshalb wollte 
ich es direkt einsetzen.

Ich sehe nur das man erst einen String- Formatter für den Formatter 
bauen und den dann einzusetzen muß:

sprintf ( fmt, "%%0%dd", LEN);
sprintf ( buf, fmt, nr);

Gibt es einen anderen Weg ?

Gruß und Dank
Gerd

Autor: Edding (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst natürlich den Präprozessor mittels "#" einen String erzeugen 
lassen:
#define xstr(s) str(s)
#define str(s) #s
#define LEN 4
#define SLEN xstr(LEN)
sprintf (buf, "%0"SLEN"d", nr);



Aber: Zusammen mit sizeof wird das vermutlich nicht klappen, einfach 
weil der Präprozessor schon fertig ist, wenn das sizeof aufgelöst werden 
kann.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd S. schrieb:
> ich möchte solchen Code bauen :
>
>     sprintf (buf, "%05d", nr);
>
> Die '5' im Formatter soll sich per #define ändern. Also so was:
>
> #define LEN sizeof(somebuf)
>
>     sprintf (buf, "%0"LEN"d", nr);
>
> Geht natürlich so nicht.

Alternative:

  sprintf(buf, "%0*d", sizeof (somebuf), nr);

Mir ist allerdings nicht ganz klar, was Du damit eigentlich bezwecken 
willst.

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.