Hallo zusammen Hab aktuell das Problem, dass ich für eine Datenausgabe an einen Drucker eine formatierte Ausgabe benötige. Hab mir folgendes ausgedacht: void print(char *format_string, ...) { char string[50]; unsigned char string_laenge; sprintf(string,format_string); string_laenge=strlen(string); usw... print_data(string); // Ausgabe auf Drucker } ein Aufruf würde dann zBsp. so aussehen: a=7; print"!Testausdruck!\n"; print("%03d",a); anscheinend wird der Funktion nur der String "&03d" übergeben der Wert der Variable(n) verscheindet dabei. Weiss jemand Rat, wie ich den gesamten Formatstring inkl. Parameter an eine Funktion übergeben kann. Hab mir das ganze mit va_list argp bla,bla,bla angeschaut hab aber dabei nicht den Durckblick. Das folgende Beispiel scheint zu funktionieren, finde ich aber nicht sonderlich elegant: sprintf(string,"%03d",a); print_data(string); Für eine rasche Antwort bin ich euch sehr dankbar! Gruss Andy
Hi Stefan Herzlichen Dank für die rasche Antwort und den informativen Link. Scheint doch keine "einfache" Lösung zu geben. Werd mal schauen, ob ich die Zeit finde das auszuprobieren.
Kennt die Library des von Dir verwendeten Compilers kein vsprintf bzw. vsnprintf? Das sind Varianten für den Gebrauch mit eben jenen variablen Argumentenlisten, so daß man mit denen eigene printf-Varianten schreiben kann. Das sähe dann so aus: void mein_printf(char* format, ...) { va_list argptr; char buffer[BUFFERSIZE]; va_start(argptr, format); _vsnprintf(buffer, BUFFERSIZE - 1, format, argptr); // irgendwas mit "buffer" anstellen }
Hi Rufus Hab mal für eine formatierte Ausgabe auf ein LCD (serielle Schnittstelle geht natürlich bei entsprechender Anpassung der putchar Routine auch) sowas geschrieben: //-------------------------------------------------- void putchar_lcd (unsigned char c) { write_LCD(c); } // --------------- static void put_one_char(char c, void *dummy) { dummy=0; putchar_lcd (c); } // ---------------- short dprintf_XY (unsigned char x,unsigned char y,const char *format, ...) { va_list ap; int nr_of_chars; goto_XY(x,y); va_start (ap, format); /* Variable argument begin */ nr_of_chars = _formatted_write (format, put_one_char, (void *) 0, ap); va_end (ap); /* Variable argument end */ return (nr_of_chars); /* According to ANSI */ } //------------------------------------------------- meinst Du man könnte das ganz soweit umschreiben, das nicht nur einzelne Zeichen, sondern ganze Strings ausgegeben werden könnten. Für meine Druckerausgabe per IRDA- Schnittstelle muss ich die ganzen Datenpackete nämlich noch in ein einfaches Protokoll verpacken. (STX, Laenge, Daten Checksumme usw.) Gruss Andy
Tut mir leid, aber die Frage verstehe ich nicht. Auch weiß ich nicht, was _formatted_write() ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.