41
Softwareentwicklung / fprintf Funktioniert nicht
« am: 11. March 2013, 21:09 »
Hallo,
ich habe jetzt mal die Funktion printf programmiet, die einfach die Funktion fprintf(stdout, format) aufruft. Ich will eine Zahl formatiert ausgeben lassen. Die Funktion gibt aber immer nur 0 aus. Woran kann denn das liegen? Ich habe es auch schon mit direktem Aufruf von fprintf versucht mit dem selben Ergebnis.
Hier mein Quellcode (Die Funktion fprintf ist noch nicht ganz fertig):
stdio.c
ich habe jetzt mal die Funktion printf programmiet, die einfach die Funktion fprintf(stdout, format) aufruft. Ich will eine Zahl formatiert ausgeben lassen. Die Funktion gibt aber immer nur 0 aus. Woran kann denn das liegen? Ich habe es auch schon mit direktem Aufruf von fprintf versucht mit dem selben Ergebnis.
Hier mein Quellcode (Die Funktion fprintf ist noch nicht ganz fertig):
stdio.c
Code: [Auswählen]
...
int fprintf(FILE *stream, const char *format, ...)
{
va_list arg;
va_start(arg, format);
uint64_t pos = 0;
static char buffer[64];
//char *buffer = malloc(64); //Mehr wird momentan nicht benötigt
if(stream == stdout)
{
for(; *format; format++)
{
switch(*format)
{
case '%': //Formatieren?
switch(*(++format))
{
case 'u': //Unsigned int
utoa(va_arg(arg, uint64_t), buffer);
puts(buffer);
pos += strlen(buffer);
break;
case 'i': //Signed int
case 'b':
itoa(va_arg(arg, int64_t), buffer);
puts(buffer);
pos += strlen(buffer);
break;
case 'f': //Float
ftoa(va_arg(arg, double), buffer);
puts(buffer);
pos += strlen(buffer);
break;
case 'X': //Hex 8
break;
case 'x': //Hex 4
break;
case 'y': //Hex 2
break;
case 's': //String
{
char *temp = va_arg(arg, char*);
puts(temp);
pos += strlen(temp);
}
break;
case 'c': //Char
putchar((char)va_arg(arg, int32_t));
pos++;
break;
case '%': //%
putchar("%");
pos++;
break;
default: //Ansonsten ungültig
format--;
pos--;
break;
}
break;
default: //Ansonsten schreibe das aktuelle Zeichen
putchar(*format);
pos++;
break;
}
}
}
else
pos = EOF;
//free(buffer);
va_end(arg);
return pos;
}
int printf(const char *format, ...)
{
return fprintf(stdout, format);
}
...