CString zu char

Dipsi

Mitglied
Hallo

Ich arbeite mit VS 2005 C++ / MFC.

Habe gerade ein kleines Problem.
Ich will einen CString in Char umwandeln.
Habe im Internet (auch hier im Forum) Beispiele gefunden.
Leider klappt es bei mir nicht.
Keine Ahnung wieso.

Ich bekomme immer die Meldung, dass CString nicht umgewandelt werden kann.

Kann mir jemand helfen?

Danke.
 
Fall Du es in der Zukunft doch brauchst:

Ich mach es so mit "strcpy":

Code:
CString ein_cstring = "hallo ich bin ein CString!";
char ein_char[50];
strcpy(ein_char,ein_cstring);
 
hab hab dazu mal eine einfache funktion geschrieben. dabei dürfte ein buffer overflow ausgeschlossen sein.

Code:
char* CString2Char(CString szIn)
{
  char* pszBuf = new char[szIn.GetLength()+1];
  strcpy_s(pszBuf,szIn.GetLength()+1,szIn);
  return pszBuf;
}
 
Hallo

Ich arbeite ebenfalls mit VS 2005 C++ / MFC und habe gerade dasselbe Problem und bekomme es seit Stunden nicht gelöst.

Ich habe exact die Funktion von SBX integriert. Wenn ich nun compilieren will, wirft der Compiler eine Fehlermeldung aus: error C2664: 'strcpy_s': Konvertierung des Parameters 3 von 'CString' in 'const char *' nicht möglich


Inzwischen bin ich ratlos. Habt ihr noch 'nen Tipp für mich?

Liebe Grüße
Markus


hab hab dazu mal eine einfache funktion geschrieben. dabei dürfte ein buffer overflow ausgeschlossen sein.

Code:
char* CString2Char(CString szIn)
{
  char* pszBuf = new char[szIn.GetLength()+1];
  strcpy_s(pszBuf,szIn.GetLength()+1,szIn);
  return pszBuf;
}
 
Du brauchst einen CString nicht mittels strcpy kopieren, wenn du das Endresultat nicht ändern möchtest. Bei CString kann man auch bequem casten. Allerdings funktioniert das nur bei const char* (bzw. LPCTSR). Wenn du einen dynamischen also veränderbaren Zeiger möchtest, kannst du mit den Methoden der Klasse arbeiten:

C++:
CString   str= "some text here"
char *ptr = str.GetBuffer(1024); // make it at least 1K long
FunctionWhichNeedsACharStar(ptr);
str.ReleaseBuffer();

Diese Hinweise habe ich übrigens hier gefunden: http://www.codeguru.com/forum/showthread.php?t=71828
 
...
C++:
...
char *ptr = str.GetBuffer(1024); // make it at least 1K long
...
...

Hallo Saftmeister,

Danke für den Tipp, leider funktioniert es so bei mir nicht. Ich erhalte hier den Fehler: 'wchar_t *' kann nicht in 'char *' konvertiert werden

Einen ähnlichen Ansatz hatt ich vorhin bereits einmal verfolgt, den ich allerdings auch nicht erfolgreich abschließen konnte. Ich vermute, dass das was mit meiner Einstellung, dass der UNICODE-Zeichensatz benutzt werden soll, zusammenhängt. Zumindest lässt mein googlen das vermuten, nur helfen tut es mir nicht. Ich komme da leider nicht weiter.

Für weitere Hilfe bin ich noch immer sehr dankbar.

LG
MArkus
 
Hallo an alle,

ich hab's . :)))

Nach seeehr langem suchen, fragen und versuchen endlich geschafft.

AB VC++ 7 kann ein CString einfach in char* umgewandelt werden (und noch diverse andere Umwandlungen sind möglich) wenn man dazu die Klasse CT2CA nutzt (wenn man sie denn kennt).

Beispiel (was bei mir funktioniert):

Code:
CString csMyString = "Hello World";
CT2CA pszString (csMyString);

// pszString kann ab sofort als const char* benutzt werden

Weitere Details kann man zum Beispiel hier finden:http://stackoverflow.com/questions/859304/convert-cstring-to-const-char

Nochmals vielen Dank für die Hilfen und Tipps, die mich inzwischen erreicht haben.

Liebe Grüße
Markus
 
Wollte nur mal anmerken, das ein CString bei einem UNICODE Projekt (natürlich)
wchar beinhaltet.

Die eine Möglichkeit wieder auf char zu kommen ist - wie bereits richtig erwähnt -
die Konverter-Klassen der ATL (z.B. CT2CA)

Die andere, vermutlich einfachere Möglichkeit ist sofort CStringA zu verwenden dann
kommt man auch mit GetBuffer klar.

Achja für Nutzer der Express Edition funktionieren vermutlich beide Wege nicht. Da
braucht man eine Stringklasse die weder zu ATL noch zu MFC gehört.

VG
Merano
 
Zurück