Wenn ich mir den Screenshot so anschaue hab ich einige andere Verdächtige als printf im Sinn.
Einmal ist da ein Problem mit den Umlauten. Das ö in "grösste" scheint nicht richtig kodiert zu sein. Du kannst entweder deinen Editor dazu bringen den Quelltext in
Codepage 437 zu speichern, oder du verzichtest auf Umlaute.
Diese zufälligen Zeichen in weiß auf grau, die nahe der Mitte liegen, können von was anderem als der printf-Funktion stammen. Mir fällt auf, dass diese nur in den Zeilen auftreten, in denen du etwas Farbiges ausgibst. Möglicherweise funktionieren die Funktionen dafür nicht richtig. Oder diese Zeichen waren schon vorher da, und die Funktion für die Ausgabe von normalem Text übermalt diese Zeichen.
Es folgt ein wenig Spekulation: Deine Ausgabefunktion für Zeichen geht möglicherweise nicht korrekt mit unsigned char/char um. Das weiß auf grau bedeutet, dass dass Attributbyte auf 0x7f (eigentlich 0xff, aber manche Emulatoren ignorieren das Blinken) gesetzt ist. Das passiert zum Beispiel, wenn man den Videospeicher als short-Pointer anspricht. Das hat zur Folge, dass wenn man ein char in den Videospeicher schreibt, dieser entsprechend seines Vorzeichens auf 16-Bit erweitert wird. Eine Lösung wäre in der Funktion für Ausgabe von einzelnen Zeichen das auszugebene Zeichen auf unsigned char zu casten bevor du es in den Videospeicher schreibst.
Die ausgegebenen Zahlen bezüglich des Speicherverbrauchs und der PCI-Geräte sind etwas komisch, aber ich würde da nicht auf ein Problem mit der printf-Funktion schließen, sondern eher die Berechnung dieser Zahlen überprüfen. Das System scheint 1 GB RAM zu haben, was nicht abwegig ist. Die 2 Millionen PCI-Geräte sind offensichtlich falsch, aber wenn du in der Nähe von Adresse 0x20A63D nichts besonderes machst, dann würde ich da erstmal nicht fprintf verdächtigen. (Und wenn du an dieser Adresse was hast und der PCI-Code korrekt ist, dann würde ich den Stack bzw. va_arg verdächtigen.)
Aber um das Problem wirklich einzugrenzen, musst du alle Seiteneffekte eliminieren. Du solltest alle Ausgaben in deinem Code ausschalten (bzw. so viele Dinge wie möglich deaktivieren), und ausschließlich printf und die Ausgabefunktionen testen. Wenn es keine äußeren Einflüsse gibt, sollte das Debugging dieser Funktionen wesentlich einfacher sein. Ich würde vorschlagen, dass du ein paar einfache Ausgaben wie printf("%i %s %c\n", 123, "456", '7'); machst, um den Fehler einzugrenzen.