CString to char[512]



  • Hey @ll ich hoffe ihr könnt mich von meiner langen Googelsuche die ich jetzt
    hinter mir habe erlösen. Ich möchte einen CString in einen char[512] überführen.

    Ich bekomme es aber einfach nicht hin:

    Versuche bisher:

    strcpy(meinchar,meincstring);
    
    meinchar = meincstring.GetBuffer();
    

    Könnt ihr bitte helfen?



  • ...



  • CString str( _T( "foo" )); 
    
    char  arr[ 512 ]; 
    
    if(sizeof(TCHAR) == sizeof(char))
    {
       strcpy_s(arr, 512, (char *)(LPCTSTR)str);  
    } 
    else {
    
      wchar_t warr[ 512 ]; 
      wcscpy_s(warr, 512, (wchar_t *)(LPCTSTR)str);  
      size_t count = wcstombs(arr, warr, 512 );
    }
    

    Projektabhängig koennte noch eine Konvertierung von TCHAR
    nach char erforderlich sein, ansonsten reicht ein einfacher
    strcpy.



  • CString in einen char[512] überführen.

    ______________________________________________
    Swtor Credits|Diablo 3 Gold Kaufen


  • Mod

    @swordfish:
    1. Warum verwendest Du GetBuffer und nicht GetString?
    GetBuffer macht evtl. ein Copy on Write! Unötig.
    2. Warum auch noch ausgerechnet str.GetBuffer( str.GetLength() + 1 )
    Das fürhrt evtl. zu einer absolut unnötigen Reallokation.
    Unnötig.

    CString str(_T("foo"));
    TCHAR arr[512];
    _tcscpy_s(arr,str.GetString());
    

    @Merano:
    1. Warum verwendest Du nicht die viel einfacheren ATL Strings. Solche Tod-Äste nur für den Fall von Unicode/MBCS halte ich für schlechten Stil. Hier würde ich (wenn schon) #ifdefs verwenden.
    Aber es geht mit den ATL Makros tausendmal einfacher.
    2. Die Angabe der Größe des Arrays in strcpy_s ist überflüssig.

    char arr2[ 512 ]; 
    strcpy_s(arr2,CT2A(str));
    


  • Martin Richter schrieb:

    Solche Tod-Äste nur für den Fall von Unicode/MBCS halte ich für schlechten Stil. Hier würde ich (wenn schon) #ifdefs verwenden.

    Stimmt. Danke für den Hinweis.

    Martin Richter schrieb:

    2. Die Angabe der Größe des Arrays in strcpy_s ist überflüssig.

    char arr2[ 512 ]; 
    strcpy_s(arr2,CT2A(str));
    

    Das geht so sicher nicht ..


  • Mod

    merano schrieb:

    Martin Richter schrieb:

    2. Die Angabe der Größe des Arrays in strcpy_s ist überflüssig.

    char arr2[ 512 ]; 
    strcpy_s(arr2,CT2A(str));
    

    Das geht so sicher nicht ..

    Und warum nicht 😉
    Versuch es...



  • char buffer[1024];
    
    USES_CONVERSION;
    strcpy(buffer, T2A(meincstring.GetBuffer(1024)));
    

  • Mod

    JeanClaudeMagnum schrieb:

    char buffer[1024];
    
    USES_CONVERSION;
    strcpy(buffer, T2A(meincstring.GetBuffer(1024)));
    

    Klargehen die alten ATL Makros auch.
    Ich würde es jedoch vermeiden. z.B. weil deren Verwendnung in einem Exception Handler zum Crash führt. Oder weil man sie in Schleifen tunlichst nicht verwenden sollte...


Anmelden zum Antworten