Forum: Compiler & IDEs #defines im sprintf - Formatter


von Gerd S. (gerd_s)


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

von Edding (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

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.