Umwandeln von CString in char *item



  • Wie bekomme ich den Wert für meinen CString in
    char *item kopiert ?

    Ist sicher ganz einfach, aber offenbar ganz anders als
    CString in char[] ?



  • strcpy();



  • Wenn ich das so machen:

    CString test = "meincstringwert";
    char *item;
    strcpy(item,test);
    

    kann ich zwar kompilieren, aber mir schmiert die Anwendung
    mit "item used without being defined" ab.
    Aber *item soll ja den Wert von test erhalten. Warum soll diese
    Variable dann nicht definiert sein ?



  • Du hast nur nen Zeiger definiert, aber keinen Speicher zugewiesen ...



  • Sorry, ich habe bisher noch nie etwas mit Zeigern
    zu tun gehabt 😞

    Ist das richtig: *item ist der Zeiger und item ist das
    Objekt auf das *item zeigt ? Und warum kann ich dann nicht
    einfach wie beschrieben in das Objekt einen CString zuweisen ?



  • Was genau willst du denn dann mit dem char-Array machen?



  • Ich möchte nur den Wert von char *item ändern können.
    Die Daten die ich einlese sind aber alle CString.

    Im weiteren Programmverlauf wird dann mittels item
    ein Prozess beendet:

    if(!strcmp(process.szExeFile,item))//hier ist mein item wieder
    {
    TerminateProcess(proc,0); // manuell definierte files gefunden und beenden
    }
    


  • 😕 push



  • Na im Prinzip ist es ganz einfach...

    Du hast einen 10l Eimer im Keller, dort kannst du eine Flüssigkeit reinfüllen. Das ist der grosse Speicher, in der Programmierung.

    Nun schreibst du auf einen Zettel was du brauchst unter anderem auch den Eimer um dort 10l Flüssigkeit rein zu füllen.

    Jetzt gehst du hin und willst den Eimer verwenden, aber du hast in deinem Code nur den Zettel, nicht den Eimer vor dir, und das ist dein Fehler, du versuchst in diesen Zettel 10l Flüssigkeit rein zu füllen. Was natürlich in einer Katastrophe sprich Programmabruch endet.

    Also musst du immer einen Zeiger mit einem Gegenstand/Objekt verbinden. Das heist den Eimer aus dem Keller holen um diesen zu verwenden. Ein Objekt kann entweder eine Klasse oder eine Variable sein.

    Also solltest du mal folgendes Versuchen :

    CString test = "meincstringwert";
    char *item;

    item = new char[länge der Variable "Test"]+1; //+1 für das \0 Zeichen<
    strcpy(item,test);

    Wie genau du die länge von Test festellen kannst, findest du in der MSDN.



  • CString test;
    test="thank you :-)";
    
    item = test.GetBuffer()+1;
    strcpy(item,test);
    

    🙂



  • Wenn du weiter mit diesen Funktion programmieren willst dann verschieben ich dich nach Ansi-C. Dies hat alles nichts mit MFC zu tun.
    Wenn du schon eine CString hast dann bleib auch dabei.

    Und an manch andere: Es ist schlechter Programmierstil ein strcpy in sein MFC-Programm zu schreiben.

    Es gibt sicher viel schlechtes an der MFC aber CString gehört sicher nicht dazu.

    @Aero: Nach dem Aufruf von GetBuffer ist ein Aufruf von ReleaseBuffer notwendig.

    Und so steht es in der MSDN-Hilfe

    CString s("Hallo Welt");
    LPTSTR p = s.GetBuffer( 10 );
    strcpy( p, "Hello" );   // Directly access CSimpleString buffer
    _ASSERT(strcmp(s, "Hello") == 0);
    s.ReleaseBuffer( );
    

Anmelden zum Antworten