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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.