#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren