eigenes printf()

dettus

Bicycle User
hallo leute!

hey, ich hab folgendes problem: ich habe bei einem groesseren projekt was ich portieren muss einen ganzen haufen printf()s drinne.

aus gruenden die der geheimhaltung unterliegen habe ich aber nur ein printf welches einzig und alleine einen unsigned char* als parameter hat.

ich kann also so etwas machen:

Code:
myprintf("hallo welt!\n");
myprintf(outbuf);

aber nicht soetwas:
Code:
myprintf("counter: %i\n",counter);


klar geht es jetzt einfach folgendes zu machen:
Code:
snprintf(outbuf,1024,"counter:%i\n",counter);myprintf(outbuf);
aber das ist ja doof.

weiss jemand wie ich vielleicht eine eigene "saubere" printf-funktion bauen kann? oder ein macro?
 
Ja, mit variablen Argumentlisten:

Code:
int myprintf(const char *str, ...)
{
  va_list list;

 va_start(list, str);
/* jetzt str Zeichenweise durchgehen und dabei ausgeben.
    Wenn du auf '%' stösst, prüfen, ob das nächste Zeichen ein 'i' ist.
    Wenn das der Fall ist: va_arg(list, int) ausgeben */
  va_end(list);
  return 1;
}
 
Das ist irgendwie ein Hohn, etwas print_f_ zu nennen, wenn es keine Formatierungsanweisungen akzeptiert. Wie kaputt ist dieser libc-Ersatz, wenn er snprintf() hat, aber kein funktionierendes printf()? Du kannst vsnprintf() verwenden, um dir ein printf() zu bauen.

PS: Lass dir zum Geburtstag eine Umschalt- und eine Kommataste schenken. Die sind wirklich sehr hilfreich.
 
lol.

myprintf kommt von mir.
das "f" steht fuer "formatiert"? wusste ich noch gar nicht! okay, dann hast du recht... ist falsch.
 
Ich gehe jetzt mal davon aus, dass deine Ausgabe von einem kleinen Controller über eine serielle Schnittstelle geht. Ich mache mir in so einem Fall eigene Funktionen für die Datentypen die ich zur Ausgabe benötige. Die benutzen natürlich die vorhandene Print-Funktion für char*.
 
@kamikaze: das habe ich auch schon.
ist aber unschoen wenn andere leute den code benutzen wollen.

@nakal: hey, ich liiiiiiiiiebe meinen job ;)
 
Die libc ist eine Library. Wenn Du eine Funktion "umschreiben" möchtest, ohne diese anzufassen, dann sorg dafür, dass beim Linken keine libs im ersten Schritt gelinkt werden, dann Deine mit Deinem printf und dann erst libc.
 
Ich würde mal sagen er hat keine libc zur Verfügung. Wenn doch kannst du mit funopen(3) fprintf(3) jede beliebige Schnittstelle unterjubeln.
 
soooooooooooooo....

scheiss auf libc. echte programmierer nehmen eine diskette und einen kuehlschrankmagneten und sind gluecklich ;)


hier die aufloesung:
Code:
#include <stdarg.h>

void myprintf(const char *format,...)
{
        va_list args;
        unsigned char line[1024];
        va_start(args,format);

        vsnprintf(line,1024,format,args);
        printf("%s\n",line);
}

void main(void)
{
        myprintf("hallo welt\n");
        myprintf("%5i %08x",0xaffe,0xd00faffe);
        myprintf("%s","ciao!");
}
danke troll! der schluessel zum erfolg war va_list.
 
:confused:

Das war aber aus der Problembeschreibung nicht ganz offensichtlich, dass Du variable Parameterlisten suchst.
 
Zurück
Oben