string in LPCTSTR



  • Hallo,
    ich möchte einen string in LPCTSTR konvertieren.Brauche es für den unten stehenden Code. SetCurrentDirectory will ja LPCTSTR. Gibt es da eine einfache Möglichkeit?

    string unterordner; 
    unterordner = s[1] + s[2] + s[3];
    if(connection_pointer->SetCurrentDirectory(unterordner))
    


  • LPCTSTR bedeutet 'long pointer to [T] string' wobei T für ASCII oder Unicode steht.
    also ist es nichts weiteres als ein typedef für char* bzw. wchar_t* (wenn du mit dem MS compiler arbeitest).
    benutzt du ascii kannst du ohne weiteres string verwenden (konstruktor). ansonsten wär wstring sinnvoller.


  • Mod

    es gibt string::c_str.

    Für das evtl. notwednige Konvertieren kannst Du ganz einfach CA2T verwenden!



  • CString definiert doch eigentlich einen Operator (LPCTSTR)!?
    Und steht das T nicht für (null-)terminated?

    Edit: string != CString 🙄 sorry.



  • Martin hat es ja schon erwähnt:
    einfach unterordner.c_str() einsetzen

    wandelt den Inhalt in nen const char* um 👍



  • Okay, danke fuer die Antworten 👍



  • R3dNeXX schrieb:

    Martin hat es ja schon erwähnt:
    einfach unterordner.c_str() einsetzen

    wandelt den Inhalt in nen const char* um 👍

    narf .. er wandelt den nicht um, er liefert einfach nur den pointer zurück. die stringklasse arbeitet auch nur mit new und delete und hat damit auch nur einen pointer zu dem dynamisch allodingsbumsten speicherbereich den beim aufruf von c_str() als const zurückliefert.



  • Und new und delete sorgen dafür, dass der Inhalt null-terminiert ist?



  • Nee, aber c_str macht das.

    Dadurch kann die string-Implementation eine Datenstruktur (z.B. rope) verwenden, die für bestimmte Operationen effektiver ist als ein kontinuierliches Puffer. c_str stellt sicher, daß ein Null-terminierter C-Style String zur Verfügung steht. Der String ist gültig, bis das string-objekt verändert wird.



  • klugscheiss schrieb:

    R3dNeXX schrieb:

    Martin hat es ja schon erwähnt:
    einfach unterordner.c_str() einsetzen

    wandelt den Inhalt in nen const char* um 👍

    narf .. er wandelt den nicht um, er liefert einfach nur den pointer zurück. die stringklasse arbeitet auch nur mit new und delete und hat damit auch nur einen pointer zu dem dynamisch allodingsbumsten speicherbereich den beim aufruf von c_str() als const zurückliefert.

    Du hast recht, er gibt nen Pointer zurück, hab mich eben mal verschrieben !



  • @ peterchen: Darauf wollte ich hinaus, danke 😉


Anmelden zum Antworten