#defines im sprintf - Formatter

OP #2022194
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
Gast #2022209
Lesenswert?
• ▲
▼
Du kannst natürlich den Präprozessor mittels "#" einen String erzeugen 
lassen:
1
#define xstr(s) str(s)
2
#define str(s) #s
3
#define LEN 4
4
#define SLEN xstr(LEN)
5
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.
Persönliche Seite #2022270
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.