Probleme bei Erstellung eines CStrings aus einem char*



  • Hallo,

    ich hab folgendes Problem...

    Ich habe einen char*-String myChar, wo irgendwas drin steht...z.b. "Dummy"...Jetzt erstelle ich daraus einen CString:

    CString str(myChar);

    Dummerweise ist jetzt der CString str nicht mit dem Inhalt von myChar initialisiert, sondern er ist leer....Weiß jemand, woran das liegt bzw. was ich da falsch mache bzw. was ich anders machen muß???

    BESTEN DANK



  • Versuch mal:

    CString str = myChar;
    


  • das müsste eigentlich auch über den konstruktor gehen



  • Ja, hast Recht. 😉
    Sollte klappen. Er sollte mal mehr Code zeigen.



  • kann es vielleicht daran liegen, dass in dem char* 1 Byte pro Zeichen verbraten werden und CString evtl. 2 Byte pro Zeichen erwartet oder so??...

    Wozu ist dieses blöde CString eigentlich gut?...Das hat mir auch schon in die andere Richtung Probleme bereitet, weil man nicht so einfach einen char * draus machen kann....;(....insgesamt erscheint mir bei Strings in C/C++ das totale Chaos zu herrschen....mir fallen da auf anhieb char*, WCHAR, TCHAR, LSTRPTR (oder so), string, CString ein...es gibt bestimmt noch mehr...;(...



  • CString verwendet je nach deinen Build-Einstellungen entweder char's (1 Byte, UNICODE nicht definiert) oder wchar_t's (2 Byte, UNICODE definiert) - das kann durchaus ein Punkt sein, der unerfahrene Programmierer verwirrt. Am besten ist es wohl, du verwendest TCHAR (das passt sich an die Gegebenheiten an) und maskierst alle String- und Zeichenliterale mit _T(...) bzw. TEXT(...).

    PS: char* ist die "String-Klasse" aus C, TCHAR (Einzelzeichen) und LPTSRT (Zeichenfolge) sind die generischen Versionen von char und char* (wahlweise ANSI oder UNICODE), std::string ist die C++ Stringklasse (basiert auf char*), CString eine MS-Eigenentwicklung (basiert auf TCHAR).



  • maxpower24 schrieb:

    kann es vielleicht daran liegen, dass in dem char* 1 Byte pro Zeichen verbraten werden und CString evtl. 2 Byte pro Zeichen erwartet oder so??...

    CString hat mehrere konstruktoren, sollte mit char* und wchar_t* klarkommen. benutzt du ein älteres mfc? kann sein, dass das da noch nicht so war.

    maxpower24 schrieb:

    mir fallen da auf anhieb char*, WCHAR, TCHAR, LSTRPTR (oder so), string, CString ein...es gibt bestimmt noch mehr...;(...

    klar, bevor es sowas wie stl gab hat jeder sein eigenes süppchen gekocht. aber wenn du mfc verwendest, ist CString bzw. CStringT wohl die beste wahl



  • ...besten Dank für die Antworten.....

    p.s.: die meisten Herkünfte der vielen tausende von Stringtypen bzw. Klassen ist mir schon klar, aber irgendwie hab ich das Gefühl, dass man da ein paar einsparen hätte können....warum MFC nun unbedingt noch ne eigene CString-Klasse braucht ist mir nicht klar....;)...

    ...das eigentliche Thema dieses Threads hat sich gerade erledigt...ich mach gleich mal nen neuen auf...;)



  • maxpower24 schrieb:

    warum MFC nun unbedingt noch ne eigene CString-Klasse braucht ist mir nicht klar....;)...

    Die MFC war da, bevor es die STL gab... ein ganz simpler Grund...
    Warum nun die STL nicht den MFC CString verwendet hat, kann ich Dir nicht sagen 😉



  • Jochen Kalmbach schrieb:

    Warum nun die STL nicht den MFC CString verwendet hat, kann ich Dir nicht sagen 😉

    Vermutlich weil Microsoft nicht genug Einfluss im ANSI-Kommitee hatte 😉
    (außerdem gab es vor der STL sicher auch andere eigenentwickelte String-Klassen mit unterschiedlichen Stärken und Schwächen)

    PS: Und die CString's sind längst nicht so flexibel wie std::basic_string<> - versuch' du mal einen CString so einzustellen, daß er Großschreibung ignoriert oder deutsche Umlaute richtig einsortiert.


Anmelden zum Antworten