funktion gibts nichts zurück



  • Hallo Leute,
    ich habe eine Funktion:

    char* receive_string1(LPCSTR nachricht) {
    
    	char string1[100];
    	for (int ii = 0; ii<100; ii++) string1[ii] = 0; // initalisierung
    	char* token = 0;
    	strcpy(string1,nachricht);
    
    	token = strtok(string1, "|");
    	token = strtok(0, "|");
    	token = strtok(0, "|");
    
    // MessageBox(0,token,"Der Token ist:",MB_OK);
    return token;
    

    Das ganze rufe ich so auf:

    string sendstring1(256, ' ');
    sendstring1 = receive_string1(empfangsbuffer.c_str());
    

    Wenn ich mir das ganze im Debugger ansehe wird die Funktion korrekt aufgerufen hat auch am Ende (bei der MessageBox) den richtigen Wert in der Token variable.
    Allerdings wird dieser Wert einfach nicht mit Return zurückgegeben. sendstring1 bleibt unverändert... 😕

    MFG, Rodney



  • einfache erklärung: strtok gibt den zeiger auf den teilstring deines strings zurück,der leider nur lokal ist, dh wenn die funktion den scope verlässt, wird das string objekt zerstört, und dein char pointer zeigt auf leeren raum



  • otze schrieb:

    einfache erklärung: strtok gibt den zeiger auf den teilstring deines strings zurück,der leider nur lokal ist, dh wenn die funktion den scope verlässt, wird das string objekt zerstört, und dein char pointer zeigt auf leeren raum

    aber das Dingen wird doch mit return zurückgegeben, das geht doch auch lokal 😕



  • wie soll ich das ganze sonst lösen? 😕



  • aber das Dingen wird doch mit return zurückgegeben, das geht doch auch lokal

    token ist ein Zeiger. Wenn Du token zurückgibst, wird eine Adresse zurückgegeben, sonst nichts. Der Speicherbereich, auf den er zeigt, wird nach Ausführung der Funktion zerstört.

    Ich würde der Funktion noch einen char* übergeben, der auf einen von Dir reservierten Speicherbreich zeigt, der auch nach Ausführen der Funktion noch gültig ist. Da würde ich das, worauf token zeigt, dann reinkopieren.

    Bsp, um es zu verdeutlichen:

    char buffer[100];
    receive_string1(nachricht, buffer);   //innerhalb der Funktion kopierst Du das  Ergebnis dann in den Buffer
    

Anmelden zum Antworten