Pointer-Fehler?



  • Hallo!

    Ich sitz nun schon den ganzen Tag herum und komm nicht drauf, wo bei diesem (kleinen) Programm der Fehler liegt 😞

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    #define MAX_EMPF 26
    
    char* check_empf(char *empf);
    
    int main(int argc, char* argv[])
    {
    	char empf[MAX_EMPF] = "";
    
    	printf("\nEmpfaenger: ");
    	fgets (empf, MAX_EMPF, stdin);
    
    	/* Beim ersten Aufruf gibt er mir die Funktion den korrekten String zurück: */
    	printf("\nNummer lautet: %s\n", check_empf (empf));
    	/* Beim zweiten Aufruf jedoch ist der String doppelt so lang? */ 
    	printf("\nNummer lautet: %s\n", check_empf (empf));
    
    	_getch();
    	return 0;
    }
    
    char* check_empf(char *empf)
    {
    	unsigned short int i = 0;
    	char dummy[MAX_EMPF] = "";
    	size_t j = strlen(empf);
    
    	for (i = 0; i < j; i++, empf++)
    	{
    		if ((*empf >= '0') && (*empf <= '9')) {	
    			strncat (dummy, empf, 1);	
    		}		
    	}
    
    	strcpy (empf, dummy);
    	printf ("\nTest in der Funktion: %s\n", empf);   // !!!!
    	return empf;
    }
    

    Beim ersten Aufruf der Funktion check_empf überprüft die Funktion den übergebenen String, ob auch nur numerische Zeichen enthalten sind und entfernt solche, die es nicht sind. klappt auch beim ersten aufruf. aber sobald ich die Funktion das zweite Mal aufrufen möchte, wird - warum, versteh ich eben nicht - der doppelte String übergeben!?

    Vielen Dank schon mal im Voraus,
    Michael



  • Fehler;

    strcpy (empf, dummy); // <---  empf wurde vorher inkrementiert und zeigt jetzt auf das ende von empf (aus main)!
        printf ("\nTest in der Funktion: %s\n", empf);   // !!!!
        return empf;
    

    Lösung:

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_EMPF 26
    
    char* check_empf(char *empf);
    
    int main(int argc, char* argv[])
    {
        char empf[MAX_EMPF] = "";
    
        printf("\nEmpfaenger: ");
        fgets (empf, MAX_EMPF, stdin);
    
        printf("\nNummer lautet: %s\n", check_empf (empf));
        printf("\nNummer lautet: %s\n", check_empf (empf));
    
        getchar();
        return 0;
    }
    
    char* check_empf(char *empf)
    {
        unsigned short int i = 0;
        char dummy[MAX_EMPF] = "", *e=empf; // empf (stringanfang) in e speichern
        size_t j = strlen(empf);
    
        for (i = 0; i < j; i++, empf++)
        {
            if ((*empf >= '0') && (*empf <= '9')) {
                strncat (dummy, empf, 1);
            }
        }
    
        strcpy (e, dummy);
        printf ("\nTest in der Funktion: %s\n", e);
        return e;
    }
    

    mfg, loose



  • Vielen Dank - werd ich daheim dann gleich testen!!! 🙂


Anmelden zum Antworten