Forum: Mikrocontroller und Digitale Elektronik Wie aus sprintf(a,b,..) -> WriteLine(b,.) machen`?


von Philipp F. (philippfister)


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

von 6to4 (Gast)


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.

von Philipp F. (philippfister)


Lesenswert?

Danke. Werde das später mal versuchen.

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.