String - wie initialisieren und benutzen?
-
Dann bekomme ich aber ein Char-Array oder?
Hm, bei MSDN sagen sie, dass sei bestandteil von VISUAL C++.
Kann man das nun unter normalem DOS C++ benutzen?
Braucht man da ein Header? Geht das mit stdio.h,prinf() und scanf()?
(Ich arbeite übrigens unter MSVC++6)
-
MC C++ schrieb:
Dann bekomme ich aber ein Char-Array oder?
Nein, string ist eine vollentwickelte Klasse, die sich selber um die Verwaltung eines char-Arrays kümmert.
Hm, bei MSDN sagen sie, dass sei bestandteil von VISUAL C++.
Kann man das nun unter normalem DOS C++ benutzen?
(Ich arbeite übrigens unter MSVC++6)CString gehört zu Visual C++, die Standard-Strings nicht.
PS: Nochmal langsam zum Mitmeißeln - wovon redest du im Moment?
-
CStoll (off) schrieb:
Kann man das nun unter normalem DOS C++ benutzen?
(Ich arbeite übrigens unter MSVC++6)CString gehört zu Visual C++, die Standard-Strings nicht.
PS: Nochmal langsam zum Mitmeißeln - wovon redest du im Moment?[/quote]
Also, ich will String unter C/C++ benutzen. Ich arbeite in der Konsole.
Zum Beispiel:#include <stdio.h> main ()( Cstring c_text; printf("Gib irgendwas ein:"); scanf("[e]Delta[/e]", &c_text); printf("[e]Psi[/e]", c_text);
Nun noch eine Frage:
Was muss bei printf Δ und scanf Ψ stehen?
Kann ich diese Klasse ohne weiteres unter der Konsole benutzen?
Kurz, geht dieses Listing?Ich hab' dich gewarnt, n00b-alarm!
-
MC C++ schrieb:
CStoll (off) schrieb:
Kann man das nun unter normalem DOS C++ benutzen?
(Ich arbeite übrigens unter MSVC++6)CString gehört zu Visual C++, die Standard-Strings nicht.
PS: Nochmal langsam zum Mitmeißeln - wovon redest du im Moment?
Also, ich will String unter C/C++ benutzen. Ich arbeite in der Konsole.
Zum Beispiel:#include <stdio.h> main ()( Cstring c_text; printf("Gib irgendwas ein:"); scanf("[e]Delta[/e]", &c_text); printf("[e]Psi[/e]", c_text);
Nun noch eine Frage:
Was muss bei printf Δ und scanf Ψ stehen?
Kann ich diese Klasse ohne weiteres unter der Konsole benutzen?
Kurz, geht dieses Listing?Ich hab' dich gewarnt, n00b-alarm!
[/quote]
Eigentlich ist CString teil der MFC (sowie von ATL/WTL)
-
In der Konsole solltest du besser die STL-Strings verwenden (CString ist imho nur sinnvoll in Zusammenarbeit mit der MFC) - und die IO-Streams von C++:
#include <string> #include <iostream> using namespace std; int main() { string text; cout<<"Gib irgendetwas ein:"; cin>>text;// oder: getline(cin,text); cout<<"Eingabe war: "<<text<<endl; }
-
Habe bei MSDN ein bisschen gesucht.
Stimmt nun dieses Listing? Würde jeder Compiler diesen Code compilieren
und könnte jedes Betriebssystem damit umgehen? Oder funktioniert das mal
wie immer nicht?#include <stdio.h> #include <string.h> int main ()( Cstring c_text; printf("Gib irgendwas ein:"); scanf("%s", &c_text); printf("%s", c_text); return 0; }
@Cstoll
Ich will aber nicht mit iostream arbeiten, da wird mein Programm viel zu gross!
Könnte ich "string text" auch mit stdio.h benutzen?
-
MC C++ schrieb:
Habe bei MSDN ein bisschen gesucht.
Stimmt nun dieses Listing? Würde jeder Compiler diesen Code compilieren
und könnte jedes Betriebssystem damit umgehen? Oder funktioniert das mal
wie immer nicht?#include <stdio.h> #include <string.h> int main ()( Cstring c_text; printf("Gib irgendwas ein:"); scanf("%s", &c_text); printf("%s", c_text); return 0; }
bei der scanf()-Zeile bin ich mir nicht sicher, ob der Compiler das schluckt - und selbst wenn, führt es zu undefiniertem Verhalten, weil es die CString-eigene Speicherverwaltung umgeht.
@Cstoll
Ich will aber nicht mit iostream arbeiten, da wird mein Programm viel zu gross!
Könnte ich "string text" auch mit stdio.h benutzen?Ja, aber das wird komplizierter:
text.reserve(100); scanf("%100s",&text[0]); printf("%s",text.c_str());
Bei stdio ist es wichtig, daß du vorher genug Platz bereitstellst - im Gegensatz dazu haben String-Klassen die Möglichkeit, sich während des Lesens zu vergrößern.
-
Dann benutze ich halt doch iostream...
Gibt es aber eine Methode, das Programm unter 100Kb zu halten?
Weil aus Erfahrung weiss ich, dass iostream bei mir 400Kb grosse
EXE's macht, und das macht definitiv keinen Spass...Danke Leute, ihr seit schnell, effizient und echt lieb zu den n00bs!
-
Schau dir mal diesen Thread an.
-
MC C++ schrieb:
Dann benutze ich halt doch iostream...
Gibt es aber eine Methode, das Programm unter 100Kb zu halten?
Weil aus Erfahrung weiss ich, dass iostream bei mir 400Kb grosse
EXE's macht, und das macht definitiv keinen Spass...Danke Leute, ihr seit schnell, effizient und echt lieb zu den n00bs!
Oh mein Gott, 400kb das passt ja nie im Leben auf die Festplatte.
Schau dir an was die C++-Streams können und du verstehst, dass sie jedes kb wert sind.
-
Any schrieb:
Oh mein Gott, 400kb das passt ja nie im Leben auf die Festplatte.
Schau dir an was die C++-Streams können und du verstehst, dass sie jedes kb wert sind.Lustig, nicht?
Wenn sich mal JEMAND sorgen um Ressourcen macht, dann ist er sofort ein Alien.
Ich hoffe du machst dir auch keine sorgen um Öl-ressourcen...
Noch was, ich schau mir die Header doch nicht an, wenn ich eh nichts davon verstehe!@Filmor
Ich verwende wohl den falschen Compiler...
-
Aus dem Ding sollte auch hervorgehen, dass ist in annähernd allen Fällen sinnlos ist, aus Ressourcen-Gründen auf die C++-Standardbibliothek zu verzichten. Bei kleinen Testprogrammen mag sich das noch bemerkbar machen, aber irgendwann solltest du Programme haben, die mehr Binärcode ausmachen als die Standardbibliothek, womit die Relevanz dieser 100 - 200 KB ins Bodenlose absinkt.
-
MC C++ die C-I/O Funktionen und die C++-(I/O-)Streams sind zwei vollkommen verschiedene Dinge, das ist wie das Vergleichen von Äpfeln mit Birnen.
Wer sagt, dass du die Header anschauen sollst? Gibt genügend Material zu dem Thema Streams im Netz.
-
das resourcensparen kannst du unter c++ vergessen. da müsstest du schon einige technische verrenkungen anstellen um das hinzubekommen. finde dich damit ab, daß c++-programme insbesondere unter windows fett sind, so wie alle anderen programmierer auch.
zum eigentlichen thema: wenn dir die alten char-array-strings zu umständlich sind, dann bleibt dir entweder die string-klasse der c++-standardbibliothek oder die CString-klasse der MFC. mit der MFC wird dein programm aber locker die megabyte-grenze überschreiten.
c++-strings sollte man nicht mit printf()/scanf() benutzen. das führt mit an sicherheit grenzender warscheinlichkeit zum absturz. auch wenn es theoretisch möglich ist, wie CStoll es schon beschrieben hat. das ist nichts für anfänger. am besten, du arbeitest mit der string-klasse der c++-standardbibliothek und mit cin/cout.
allerdings ist mir eine anfängergerechte einführung in das arbeiten mit stl-strings bisher noch nicht untergekommen. da bist du als anfänger weitgehend auf dich allein gestellt.
-
Müssen nicht groß sein, das Problem liegt hier am mingw. Mitm vc sind die viel kleiner. Aber wie gesagt, auf die paar kb kommts nicht wirklich an.