tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
5375
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dipsi Dipsi ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    98
    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.
     

  2. #2
    Dipsi Dipsi ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Beiträge
    98
    Problem gelöst.
    Habe es so umgeschrieben, dass ich die CString Variable gar nicht konvertieren muss.
     

  3. #3
    Avatar von SunnyBunny
    SunnyBunny SunnyBunny ist offline Mitglied Silber
    Registriert seit
    May 2006
    Beiträge
    78
    Fall Du es in der Zukunft doch brauchst:

    Ich mach es so mit "strcpy":

    Code :
    1
    2
    3
    
    CString ein_cstring = "hallo ich bin ein CString!";
    char ein_char[50];
    strcpy(ein_char,ein_cstring);
     

  4. #4
    SBX SBX ist offline Rookie
    Registriert seit
    May 2007
    Beiträge
    9
    hab hab dazu mal eine einfache funktion geschrieben. dabei dürfte ein buffer overflow ausgeschlossen sein.

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

  5. #5
    Baron Sengir Baron Sengir ist offline Mitglied Silber
    Registriert seit
    Oct 2003
    Beiträge
    63
    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


    Zitat Zitat von SBX Beitrag anzeigen
    hab hab dazu mal eine einfache funktion geschrieben. dabei dürfte ein buffer overflow ausgeschlossen sein.

    Code :
    1
    2
    3
    4
    5
    6
    
    char* CString2Char(CString szIn)
    {
      char* pszBuf = new char[szIn.GetLength()+1];
      strcpy_s(pszBuf,szIn.GetLength()+1,szIn);
      return pszBuf;
    }
     
    Trau Keinem, der an 10 Fingern bis 1024 zählen kann!

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist gerade online Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.127
    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:

    Code cpp:
    1
    2
    3
    4
    
    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
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Baron Sengir Baron Sengir ist offline Mitglied Silber
    Registriert seit
    Oct 2003
    Beiträge
    63
    Zitat Zitat von saftmeister Beitrag anzeigen
    ...
    Code cpp:
    1
    2
    3
    
    ...
    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
     
    Trau Keinem, der an 10 Fingern bis 1024 zählen kann!

  8. #8
    Baron Sengir Baron Sengir ist offline Mitglied Silber
    Registriert seit
    Oct 2003
    Beiträge
    63
    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 :
    1
    2
    3
    4
    
    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/8...-to-const-char

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

    Liebe Grüße
    Markus
     
    Trau Keinem, der an 10 Fingern bis 1024 zählen kann!

  9. #9
    merano merano ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    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
     

Ähnliche Themen

  1. char* into CString
    Von TheTank im Forum VisualStudio & MFC
    Antworten: 8
    Letzter Beitrag: 11.10.10, 15:15
  2. char* to CString
    Von TheTank im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 07.09.10, 15:37
  3. 'class CString' to 'char *'
    Von shader09 im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 26.10.07, 14:59
  4. CString in char
    Von napstermania im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 18.10.04, 23:06
  5. CString -> char* Problem mit getline()
    Von tantor im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 23.06.04, 08:20