stdout nach string
-
Was ich nicht ganz verstehe: Wenn eine Funktion nicht rausschreiben soll sondern du die Möglichkeit haben willst es in einen anderen ostream schreiben zu können übergib der Funktion doch einen ostream und in den soll es schreiben.
Standardmäßig ist der eben cout, wenn nicht dann eben ein anderer Stream.
MfG SideWinder
-
Also die Sache ist die:
Ich habe eine Klasse, die normalerweise in einer Konsolenanwendung laufen soll.
Diese Klasse schreibt etwas mit 'printf' in die Konsole.Nun will ich die gleiche Klasse - möglichst ohne sie zu ändern - in einer Windowsanwendung benutzen, nur dass die Ausgabe eben nicht an die Konsole gehen soll, sondern in einen String, den ich dann im Fenster ausgebe.
-
Diese Klasse schreibt etwas mit 'printf' in die Konsole.
ist kein c++ sondern C denke ich doch mal
naja wenn du aber ostreams verwenden würdest mir denen du wie schon gesagt mit 'cout' in stdout schreibst kannst du dir auch nen eigenen ostream nehmen mit dem du dann mit dem string oder was auch immer machen kannst waste willst **
-
Leute, natürlich gibts printf und stdout in C++, was soll dieser Quatsch immer?
-
Leute, natürlich gibts printf und stdout in C++, was soll dieser Quatsch immer?
sorry nehms zurück!!!
ändert aba sonst nichts am artikel oben
-
Bashar schrieb:
Leute, natürlich gibts printf und stdout in C++, was soll dieser Quatsch immer?
er sagte auch nicht "gibts nicht" sondern "ist nicht"
was ein großer Unterschied ist.
-
Hm ok.
Leider weiß ich jetzt immernoch nicht richtig weiter.
Könnte mir bitte jemand ein kurzes Beispiel machen, wie ich so einen ostream umleite und einen string draus mache ?
-
Vielleicht lehr dich das, die Ausgabe von der Klasse zu trennen.
Normalerweise hat man eine Klasse die die Daten hält, und in der
auch die notwendigen Funktionen definiert sind, und dann hat
man noch eine Darstellungsklasse, die dann zum beispiel
die Klasse in der Konsole abhandelt, oder in der GUI oder sonst wo.cout könntest du in einen stringstream umleiten, evtl. ist das
ein kompromiss, falls du nicht printf für umfangreichere dinge benutzt.Devil
-
Hm, also ich habe es mittlerweile geschafft cout in einen stringstream umzuleiten. Und Dinge wie 'cout << "test"' funktionieren auch, aber 'printf ("test")' schreibt weiter in die Konsole
-
k1ro schrieb:
er sagte auch nicht "gibts nicht" sondern "ist nicht"
was ein großer Unterschied ist.In dem Zusammenhang ist es gleichbedeutend. Besser wär vielleicht "In C++ hat printf eigentlich nichts zu suchen", oder "printf ist kein stilistisch gutes C++", aber das sind offensichtlich Meinungen, und keine Fakten.
clown: Wenn du die Klasse nicht ändern kannst, hast du ein ziemliches Problem. Portabel gehts auf keinen Fall.
Wenn du sie doch ändern kannst, ist es einfach (wie Sidewinder schon sagte):
// ALT: void foo() { printf("Foobar"); } int main() { foo(); } //NEU: void foo(ostream& os) { os << "Foobar"; } int main() { ostringstream ss; foo(ss); cout << ss.str(); }
Edit: Ups, s.u.
-
meinst doch
foo(ss);//nicht foo(os);
oder .. wenn nicht bin ich voll raus
@edit