std::string in TCHAR

metaxy

Grünschnabel
hi,
1.wie soll ich ein std::string in TCHAR * umwandeln?
Code:
std:string1 = "bla";
TCHAR * tc;
tc = string1; //?
tc = reinterpret_cast<TCHAR*>(string1);//?
2.
an ein TCHAR * ein int anhängen
Code:
TCHAR* tc ="id=";
int i;
tc+=i;//?
 
hi,
1.wie soll ich ein std::string in TCHAR * umwandeln?
Code:
std:string1 = "bla";
TCHAR * tc;
tc = string1; //?
tc = reinterpret_cast<TCHAR*>(string1);//?
2.
an ein TCHAR * ein int anhängen
Code:
TCHAR* tc ="id=";
int i;
tc+=i;//?

Zu 1.
string kapselt die Daten intern in einem Objekt, selbiges kann ohne spezielle Konvertierungsoperatoren des Objekts nicht einfach an einen fremden Datentyp zugewiesen werden.
Ein Weg ist z.B. die Daten aus dem String in einen passenden Speicher zu kopieren.

Code:
    std::string str = "hallo welt";   //ein String
    TCHAR *pBuf = new TCHAR[str.length() + 1];       //passender Puffer 
    strncpy( pBuf, str.c_str(), str.length());   //Daten kopieren
    // ... mit dem Puffer arbeiten
    delete [] pBuf;
Vielleicht kein gutes Beispiel. Soll zeigen wie Du eben an die Daten aus dem string kommst. Den string umwandeln in TCHAR ist nicht möglich.

Soll jetzt nur in C-Funktionen wie printf der Zugriff auf das string-Objekt erfolgen, kann auch die Methode c_str() des Objektes verwendet werden.

Code:
    std::string str = "hallo welt";
    printf( "%s", str.c_str() );
Schau Dir mal den Typ der Methode c_str() an.

Zu 2.
Hier kann man z.B. sprintf verwenden um Daten in einen String zu konvertieren

Code:
    TCHAR xxx[100] = { 0 };
    int iZahl = 0;
    sprintf( xxx, "eine ganze Zahl: %d", iZahl );
Sieh es als Beispiel, vielleicht hilft es ja.

Gruß René
 
erstmal danke!
Nur das 1. funkt nicht ganz.Ich bekommen zwar keine Synatx-errors aber aber ende der zeichenkette sind so komische Zeichen die da nicht hingehören,wie ²²²²½½½½½½½½?¯? .
Code:
string str = new_link(i);// meine funktion
TCHAR *pBuf = new TCHAR[str.length() + 1];
strncpy( pBuf, str.c_str(), str.length());
cout << "pbuf  " << pBuf <<endl;//anzeigen
code = scann(pBuf);// verwenden
delete [] pBuf;//leeren
 
Ich bin leider nicht so gut im Hellsehen - ich über - aber es klappt nicht so recht ;)
Zeig doch mal was die Funktionen new_link(i) und scann(pBuf) machen.

Mal sehen ob sich da ein Fehler eingeschlichen haben könnte.

Gruß
 
Du müsstest bei strncpy als dritten Parameter str.length() + 1 einsetzen, damit er das abschließende Null-Byte mitkopiert.

Sonst bekommst du bei der Ausgabe mit C-Funktionen den Speicher nach dem String zu sehen.
 
Zurück