C sprintf ...-Paramter durchschleifen

Hallo,
in C gibt es ja die Möglichkeit, Funktionen mit variabler Parameterzahl anzulegen, in dem man hinten einen „…“ Parameter anfügt und die Parameter dann z.B. über eine va_list ausliest.

Meine Frage: Wie schaffe ich es, so eine Funktion zu kapseln und die Parameter durchzureichen?

Z.B.

void mysprintf(const char \* format,...)
{
 sprintf(erg,mychangedformat,...);
}

Leider geht das so nicht, aber einfach eine va_list oder einen Zeiger darauf anhängen geht auch nicht. Wie also verfahren?

Grüße

Ralph

in C gibt es ja die Möglichkeit, Funktionen mit variabler
Parameterzahl anzulegen, in dem man hinten einen „…“
Parameter anfügt und die Parameter dann z.B. über eine va_list
ausliest.

Meine Frage: Wie schaffe ich es, so eine Funktion zu kapseln
und die Parameter durchzureichen?

Du musst den Parameter als va_list beschaffen und dann an eine Funktion übergeben, die damit umgehen kann. Schau dir z.B. mal vsnprintf an.

Allerdings kann der varargs-mechanismus einigermaßen gefährlich sein, so dass du ernsthaft nach Alternativen suchen solltest.

Mit dem Präprozessor geht so etwas, falls dir das etwas nutzt:

#define mysprintf(format,...) \
{ \
 sprintf(erg,mychangedformat,\_\_VA\_ARGS\_\_); \
}

– Daniel

Danke, aber leider kennt der bei mir dieses Define nicht…

Du musst den Parameter als va_list beschaffen und dann an eine
Funktion übergeben, die damit umgehen kann. Schau dir z.B. mal
vsnprintf an.

Das würde ich ja gerne, aber ich habe leider keine Funktion entsprechend meinem Fall für vsnprintf, also muss es ohne va_list oder gar nicht gehen…

Grüße

Ralph

Hallo Ralph,

in C gibt es ja die Möglichkeit, Funktionen mit variabler
Parameterzahl anzulegen, in dem man hinten einen „…“
Parameter anfügt und die Parameter dann z.B. über eine va_list
ausliest.
Meine Frage: Wie schaffe ich es, so eine Funktion zu kapseln
und die Parameter durchzureichen?

Anhand Deiner weiteren Kommentare ist mir
schleierhaft, über welche Funktionalität
Dein C-System denn tatsächlich verfügt.

Kannst Du das bitte näher erläutern?
Die Standard-Variante wäre in etwa
so:

 #include 
// #include aber da gibt es natürlich etwa
1 Mio Variationen [_xy_printf(...)], je nach Gusto
Grüße

CMБ

Das würde ich ja gerne, aber ich habe leider keine Funktion
entsprechend meinem Fall für vsnprintf, also muss es ohne
va_list oder gar nicht gehen…

Ein Bisschen relevanter Code, z.B. von der aufzurufenden Funktion wäre praktisch.