Wie aus sprintf(a,b,..) -> WriteLine(b,.) machen`?

OP #2074293
Lesenswert?

Hallo Liebe Gemeinde,
ich habe folgendes Problem. Ich möchte die Funktion sprintf nutzen. 
Allerdings will ich nicht jedesmal das Ziel mit übergeben. Also habe ich 
folgendes geschrieben. (kompliert wird mit Softune Workbench für einen 
Fujitsu µC.)

char TxBuffer[32];

void WriteLine(char *StrPointer, ...)
{
 va_list argptr;
 va_start(argptr, *StrPointer);
 sprintf(&TxBuffer[0], StrPointer, argptr);
 va_end (argptr);
 Puts1(&TxBuffer);
}

Aufruf:

WriteLine("Variablen Wert %d", ucZahl);

Doch egal welchen Wert Zahl hat kommt immer der gleiche (falsche) Wert 
auf der Uart raus.
Ändere ich den Aufruf auf:

sprintf(&TxBuffer[0], "Variablen Wert %d", ucZahl);
Puts1(&TxBuffer);

Funktioniert es. Was mache ich falsch?
Könnt ihr mir bitte helfen?

Danke
Gast #2074297
Lesenswert?

dein va_start hat die "..."-Parameter schon aufgelöst, die kriegst du so 
nicht mehr ins printf.


Deshalb:
1
       int vprintf(const char *format, va_list ap);
2
       int vfprintf(FILE *stream, const char *format, va_list ap);
3
       int vsprintf(char *str, const char *format, va_list ap);
4
       int vsnprintf(char *str, size_t size, const char *format, va_list ap);

Die schlucken die vor-geparste va_list.

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