String in char funktioniert nicht
-
Hallo, ich hoffe das passt hier:
Ich habe ein kleines Problem. Ich habe ein Programm geschrieben, das Strings benutzt, ich habe die String-klasse aus dem Buch Jetzt lerne ich C++ in 21 Tagem von Jesse Liberty benutzt, da ich die standard implementationen nie zum laufen gekriegt habe wie ich's wollte.
Mein Problem ist jetzt, dass ich einen String in ein char array konvertieren möchte. Dazu habe ich so etwas geschrieben:for (int n = 0; n < 128; n++) { character[n] = klasse.stringelement[n]; }ich habe also über eine for-schleife die einzelnen Elemente ausgelesen. Die String-Klasse hat den [] Operator allerdings überladen und zwar einmal so:
char & String::operator[](unsigned short offset) { if (offset > itsLen) return itsString[itsLen-1]; else return itsString[offset]; }und so:
char String::operator[](unsigned short offset) const { if (offset > itsLen) return itsString[itsLen-1]; else return itsString[offset]; }also einmal wird nur eine Referenz zurückgegeben.
So, ich kriege soweit auch keine Fehler, das char-array ist auch definiert:
char character[128];Allerdings wird, wenn ich das Array anschließend ausgebe nichts ausgegeben. Woran kann das liegen?
Mein Ziel dabei ist es, den Inhalt des Strings anschließend an die Funktion system(); zu übergeben, die ist ja in der MFC oderso.
Ich hoffe mir kann wer weiterhelfen bzw nen Tip geben wie ich das Problem lösen kann, wenn möglich bitte ohne besondere Funktionen aus irgendwelchen MFCs, STls was auch immer^^.
Danke schonmal.
-
Fr3yr schrieb:
Hallo, ich hoffe das passt hier:
Ich habe ein kleines Problem. Ich habe ein Programm geschrieben, das Strings benutzt, ich habe die String-klasse aus dem Buch Jetzt lerne ich C++ in 21 Tagem von Jesse Liberty benutzt, da ich die standard implementationen nie zum laufen gekriegt habe wie ich's wollte...
Was heißt du hast die Standardimplementation nie zum Laufen bekommen wie du es wolltest?
#include <string> int main() { std::string text = "Test"; }Was ist daran so schwer? Oder setzt du einen so alten Compiler ein, der bereits obigen Code nicht versteht? Wenn ja Wechsel dringends!
Zum anderen: Alle Bücher der "in xx Tagen"-Reihe taugen in der Regel zu nichts außer vielleicht zum Feuermachen. Verwende lieber ein sinnvolles Fachbuch. Die Bücherreihe gaukelt mehrere Dinge vor die sie nicht halten kann (unter anderem das xx Tage zum lernen reichen) und bringt dem Leser auch nicht wirklich etwas sinnvolles bei.
Fr3yr schrieb:
Mein Problem ist jetzt, dass ich einen String in ein char array konvertieren möchte. Dazu habe ich so etwas geschrieben:
...
Mein Ziel dabei ist es, den Inhalt des Strings anschließend an die Funktion system(); zu übergeben, die ist ja in der MFC oderso.
...
Ich hoffe mir kann wer weiterhelfen bzw nen Tip geben wie ich das Problem lösen kann, wenn möglich bitte ohne besondere Funktionen aus irgendwelchen MFCs, STls was auch immer^^.So, nun erkläre mir mal warum ohne besondere Funktionen aus der STL? Die STL ist Bestandteil des ISO C++ Standards, im Gegensatz zu deiner system()-Funktion. Und für die Übergabe reicht es in der Regel die Rückgabe der Methode c_str() vom STL-String zu verwenden (im obigen Beispiel also irgendwas wie "system(text.c_str())"...).
cu André
-
Fr3yr schrieb:
for (int n = 0; n < 128; n++) { character[n] = klasse.stringelement[n]; }Allerdings wird, wenn ich das Array anschließend ausgebe nichts ausgegeben. Woran kann das liegen?
char array strings sind 0 terminiert, d.h. du musst am ende also hinter das letze element vom string noch \0 einfügen sonst kann alles mögliche passieren....das hab ich in deinem code jedoch nirgends gesehn. nur das die chars einzeln kopiert werden... aber was spricht den gegen einString.c_str() ??? das liefert doch schon ein const char* ....
-
also danke schonmal für die Antworten soweit.
Erstmal zum Compiler: ich habe Microsoft Visual C++ 6.0 Author Edition.
Und ganz ehrlich, der Code funktioniert da bei mir komischerweise net:#include <string> int main() { std::string text = "Test"; }frag mich nicht warum, irgendwas hat er mit den Include-Dateien dann.
Ich benutze so ungern dinge aus der STL, MFC oderso da ich da noch nicht so den Durchblick habe was jetzt was ist und was ich dann einbinden muss. Für den Anfang habe ich gerne alles beisammen in meinem Programm, so ist das für mich übersichtlicher.Ich werde das nochmal mit /0 terminieren und mal schaun ob's funktioniert.
Was für Bücher kannst du denn sonst so empfehlen? Ich fand das Buch ganz gut erklärt soweit.
-
Fr3yr schrieb:
also danke schonmal für die Antworten soweit.
Erstmal zum Compiler: ich habe Microsoft Visual C++ 6.0 Author Edition.Lad dir besser mal die neue Version von Microsft runter
-
Netinstaller für einen neuen Compiler gibts hier:
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780&release_id=529741Eine IDE dazu gibts hier:
http://codeblocks.org
oder hier:
http://www.eclipse.org/downloads/Komplettpaket von M$ gibts hier:
http://www.microsoft.com/express/download/
HTH
rya.
-
Fr3yr schrieb:
...ich habe Microsoft Visual C++ 6.0 Author Edition...
Man sollte nicht mit einem uralten Compiler arbeiten, wie von anderen geschrieben gibt es mehrere Alternativen (wenn du vorher mit MSVC gearbeitet hast würde ich dir empfehlen die MSVC 2008 Expressversion zu verwenden)...
Argh, ich sehe grade das du vielleicht MFC einsetzt. Dann wird dir die Expressedition nicht reichen und du müsstest etwa 100-200 Euro für die Standardedition berappen (wobei es ab und zu Aktionen von MS gibt wo man die Standardedition kostenlos bekommen kann, z.B. mit der Auflage sich 5 Lernviedoclips anzuschauen und die Codes im Anschluß zu notieren [So kam ich z.B. an meine private MSVC 2005 Standard Version - und ich brauche wegen Plugins mindestens die Standard]).
cu André