string in char



  • Hallo

    ich habe hier versucht einen CString in ein Char array zu schreiben.
    leider stürtzt das immer ab. ich weiß absolut nicht mehr wie ich das
    beheben soll. ich hoffe das jemand einen tip für mich hat.
    danke

    char eingabe[20];
    char i;
    int a,c,d;
    CString s1 = "This ";
    b =strlen(s1);
    
    for(a=0; a<=b; a++)
    {     
       i = s1.GetAt(a);			
       eingabe[a]= i;  
    }
    


  • erich17 schrieb:

    b =strlen(s1);
    

    Wenn schon, dann bitte so

    b = s1.GetLength();
    

    erich17 schrieb:

    for(a=0; a<=b; a++)
    {     
       i = s1.GetAt(a);			
       eingabe[a]= i;  
    }
    

    Läuft letztendlich darauf hinaus, dass du auf s1 mit

    s1.GetAt(s1.GetLength())
    

    zugreifst. Das ist aber nicht erlaubt. Schau dir dazu mal die Funktion CString::GetAt in MSDN an.

    btw:
    Warum willst du einen CString in ein char Array kopieren? Mit CString::GetBuffer hast du doch schon das Zeichen-Array.



  • Und nach GetBuffer ReleaseBuffer nicht vergessen.



  • ich fang gerade erst an so richtig zu programmieren.
    deßwegen vielleicht so ein umweg.

    aber danke



  • Hi,

    das Deine Programm abraucht liegt daran:

    for(a=0; a<=b; a++)
    

    es muss so aussehen:

    for(a=0; a < b; a++)
    

    Du läufst ein Zeichen über den CString-Buffer und das
    löst im Debug einen ASSERT aus und im Release wohl einen Absturz.

    BTW. hat CString einen LPCTSTR operator. Damit kann man
    wesentlich einfacher arbeiten.

    Wenn Du dein Programm für ANSI und UNICODE gleich haben möchtest,
    würde ich es so machen:

    TCHAR szString[20];
    CString sString(_T("This "));
    
    _tcsncpy(szString, sizeof(szString) / sizeof(szString[0]), sString);
    

    oder nur ANSI:

    char szString[20];
    CString sString(_T("This "));
    
    strncpy(szString, sizeof(szString) / sizeof(szString[0]), sString);
    

    Dadurch wird der LPCTSTR-Operator von CString verwendet und durch _tcsncpy oder
    strncpy verhinderst Du einen BufferOverflow in deinem rohen char Array!

    Gruss
    EB



  • Bei solchen Fehlern ist es entpfehlenswert wenn man mal den Debuger testet 😉

    Sorry mußte sein 😃

    MFG



  • Aber das ReleaseBuffer nach einem GetBuffer Zugriff braucht man doch eigentlich nur, wenn man schreibend auf den Puffer zugegriffen hat, oder? (Erinner mich da wage an was aus der MSDN)


Log in to reply