string variablen



  • ich habe eine variable

    string y ="test";
    

    und möchte diese in eine variable

    LPCTSTR x= "";
    

    diese soll als Inhalt y bekommen, aber

    LPCTSTR x= y;
    

    funktioniert logischerweise nicht... was muss ich tun...



  • strcpy, memcpy - so mach ich als alter Cler das..

    nicht aufregen, ich weiß, dass des hier des C++-Forum ist *g*

    Strings gibt es im C/C++ in dem Sinne nicht.
    Der Datentyp string ist eigentlich ein Pointer auf ein char-Array.
    wenn Du "LPSTR = string" machst, dann weißt du dem Einen nur ne Adressse zu, kopierst aber die Zeichenkette nicht.



  • DocJunioR schrieb:

    Der Datentyp string ist eigentlich ein Pointer auf ein char-Array.

    Komisch, bei mir ist das eine Klasse.

    @luiggi:
    Und die hat eine Memberfunktion c_str, die macht genau das, was du hier brauchst (wenn du nicht gerade UNICODE definiert hast).



  • Bitte beachten das c_str() const char* liefert und deshalt nur lesend zugegriffen werden sollte.



  • also nochmal im detail..

    els erstes setze ich einen string aus einem string und einer Zahl zusammen

    int x=1;
    string modem = "m";
    string y = "";
    stringstream stream;
    string str = "";
    stream.str("");
    stream.clear();
    stream << x;
    str = stream.str();
    y = modem + str;
    

    dieser string Y liefert mir in einer schleife die bezeichner meiner [Section] in einem Inifile.. also [m1] [m2] [m3] usw..

    jetzt will ich aus dem inifile bestimmte entry auslesen

    char pfad[50];
    GetPrivateProfileString(y,"name","stop",name,sizeof(name),ININame);
    char pfad[50];
    GetPrivateProfileString(y,"pfad","stop",pfad,sizeof(pfad),ININame);
    

    Ich habe aber jetzt das problem, das bei dieser funktion der [section] bezeicher als LPCTSTR Y = "M1" usw. deklariert sein muss...

    dh, ich muss meine string Y irgendwie zu einer LPCTSTR Y machen..

    kann mir da jemand helfen??



  • Na da war das mit dem c_str() schon richtig:

    GetPrivateProfileString(y.c_str(),"pfad","stop",pfad,sizeof(pfad),ININame);
    

    //Wenn der Compiler wegen const char* mault:

    GetPrivateProfileString(const_cast<char*>(y.c_str()),"pfad","stop",pfad,sizeof(pfad),ININame);
    


  • IHR SEIT EINFACH DIE BESTEN!! 👍 👍 👍



  • @MFK
    für Unicode Zeichen gibt es ja std::wstring

    @Knudellbaer
    öhm, der const_cast ist sehr gefährlich, da du ja nicht weisst, wie std::string intern arbeitet. Wenn die Funktion nun versucht den String zu verändern, dann entsteht undefiniertes Verhalten. Wenn std::string zB. über Referenzzählung implementiert ist, kannst du das komplette System zerschießen



  • Ja deswegen ja der Hinweis.

    Aber wenn Du ne Routine hast die den String nur kurzfirstig liest, kopierst Du den dann in ein char um ? Denke nicht. Manche Compiler sind aber zäh wenns um die Übergabe geht ;o)



  • Wenn die Funktion den String nicht ändert (durch const char* gekenzeichnet), dann kopier ich natürlich nicht um. Aber ich weiss ja nicht genau, was die genannte Funktion macht (ist ja kein ISO C++), deswegen die Warnung



  • Knuddlbaer schrieb:

    Bitte beachten das c_str() const char* liefert und deshalt nur lesend zugegriffen werden sollte.

    Der meinung bin ich auch 🤡


Anmelden zum Antworten