Verwirrung bei string, char, cstring...



  • hi,

    ich hoffe ich habe das richtige forum gewählt. folgendes:

    ich hab ein win32-konsolen programm und verwende ziemlich unkontrolliert (kommt mir so vor) printf, scanf, gets, Cstring, char, LPTSTR.
    die meisten methoden, die ich benutze, zB createregkeyex oder logonuser können aber mit cstring nix anfangen. dazu kommt, dass wenn ich eine char variable anlege: char test[20]; dann muss ich zum beispiel damit rechnen, dass jemand mehr als 20 zeichen angibt. außerdem gibts ja da noch cin und cout, die ich nich ans laufen kriege. ich entwickle mit .net und wenn ich die iostream includiere sagt er was von wegen deprecated. ich bin garnicht sicher ob ich wirklich einen roten faden habe, was die variablentypen und die ein-ausgabe angeht.

    worauf sollte ich achten? habe das forum mal durchsucht aber bin nich fündig geworden. vielleicht hab ich auch falsch gesucht.

    ist string besser als CString, da es ja kein mfc-programm ist??

    wär nett wenn jemand weiter weiß.

    vielen dank



  • Hallo Tody,

    dein Beitrag hört sich ja ziemlich konfus an... 😕

    1.Also DU solltest Dir erst mal klar werden was Dein Programm können soll und auf welchen Plattformen es laufen soll... Das löst schon manchen knoten.
    2. Deine Schilderungen hören sich so an als ob Du noch Anfänger bist. Vielleicht solltest Du dich erst ein Mal in die Thematik der Handhabung von Zeichenketten einlesen, also die FAQ hier oder evtl. ein gutes Programmierbuch. 😉

    3. Man hätte vieles korrigieren können wenn Du deinen Quellcode gepostet hättest... So schiesst man einfach ins leere.

    Also was sich allgemein klären lässt:
    Wenn deine einzulesende Zeichenkette von variabler Länge ist, solltest du den Zeichenarray dynamisch erzeugen (new, delete). Einfacher dürfte es sein die STL string Klassen hierfür zu verwenden, die nehmen dir das ab.
    Falls Dein Proggi sowieso ein Konsolenprogramm bleiebn soll, würde ich Dir sowieso die Verwendung der STL- Klassen nahelegen, da diese auch für andere Plattformen umgesetzt wurden und somit dein Code auch leichter so portieren wäre.

    Gruß
    Olli



  • Hi!

    #include <iostream> funzt, da darf kein .h drann sein.

    Ob Du CString aus der MFC oder den std::string aus der STL verwendest hängt davon ob wo der Kern des Programmteiles ist.

    In der MFC oder in der STL. Ich persönlich arbeite viel lieber mit der STL als mit der MFC und daher eher std::string. Andere Arbeiten viel lieber mit der MFC und allem was sie bietet dann CString.

    Es macht wenig Sinn viel Konvertieren zu müssen.

    Zwei Beispiele zum "umwandeln"

    std::string temp("Hallo Welt");
    ::MessageBox(NULL,temp.c_str(),temp.c_str(),NULL);

    CString temp2;
    std::cout<<static_cast<LPCSTR>(temp2);

    [ Dieser Beitrag wurde am 05.05.2003 um 15:56 Uhr von Knuddlbaer editiert. ]



  • ja ähm, wenn ich das so lese...
    es stimmt schon, dass ich anfänger bin.

    ich habe halt für zeichenketten mal char-arrays und mal cstring benutzt. allerdings habe ich für den cstring <atlstr.h> includiert. in der msdn stand was von wegen das wäre für nicht-mfc-anwendungen.

    mir war diese ganze hin und her wandlerei so komisch. ich stelle jetzt auf std::string um. so, dass ich für zeichenketten nur noch einen variablentyp habe.
    ich kenn es aus java so, dass es da nur einen String gibt und da kommen zeichenketten rein. hier gibts dann char, const char, unsigned char, cstring, cstringt, string und was weiß ich. da kam ich durcheinander.

    jetzt hatte ich aber den cstring so schön gecastet:

    CString m_Ort = "blabla";

    RegSetValueEx(hkey,
    "Ort",
    0,
    REG_SZ,
    (unsigned char*)(LPCTSTR)m_Ort,
    (char)strlen(m_Ort) + 1);

    wenn ich aus cstring std::string mache, blicke ich schon wieder nicht durch.

    zu cin habe ich in der msdn auch nich wirklich viel gefunden. da habe ich nämlich jetzt das problem wenn ich einlese kommts zum fehler.

    std::string m_Ort;
    std::cin >> m_Ort;

    mannomann, ich hab noch einiges zu lernen. danke für eure geduld.



  • --- Offtopic: -----------------------------------------------------------------
    Ich würde sagen, du legst dich innerhalb eines Moduls entweder auf CString oder std::string fest. Durch Mischmasch-Programme blickst du nach 2 Jahren nicht mehr durch. Es gibt vieles was für CString spricht (Einfach, beinahe Idiotensicher), aber auch vieles für std::string (Portabel, auch beinahe Idiotensicher aber IMHO ein wenig ungewohnt wenn man CString gewohnt ist 😉 ). Man sollte aber beides können wenn man sowohl unter Windows als auch plattform-unabhängig programmieren will.


Anmelden zum Antworten