String umdrehen funktioniert nicht



  • Moin,

    ich soll eine Funktion schreiben die einen übergebenen String rückwärts wieder zurückgibt, nur leider funktioniert dass nicht so wie ich mir das vorstelle.

    #include <stdio.h>
    #include <stdlib.h>
    
    int laenge(char *x){        //Funktion um die Länge eines überg. Strings 
                                // zu ermitteln - funktioniert
        int counter =0;
        int i;
    
        for(i=0; x[i]!='\0'; i++){
            counter++;
        }
    
        return counter;
    }
    
    char *umdrehen(char *arr,char *dest){       //mit dieser Fkt. wollte ich den
                                                //übergebenen String umdrehen
    
        int i;                 //Laufvariable
        int len=laenge(arr);   //Länge ermitteln
        int b=len;
    
        for(i=0; i<len; i++){
    
            dest[i]=arr[b];     //Das Zeichen dass bei arr an letzter Stelle steht
            b--;                //soll bei dest an die erste Stelle
        }                     //dann wird b um eins verringert und i um eins erhöht 
                               //das ganze solange bis die Länge von arr erreicht 
                                //wurde
         return dest;            
    }
    
    int main()
    {
        char arr[]="Meister";
        char arr1[10];
    
        printf("%s",umdrehen(arr,arr1));
    
    }
    

    Das Programm startet, und terminiert ganz normal, nur dass nichts ausgegeben wird und ich auch keine Fehlermeldung bekomme.

    Wo liegt mein Fehler 😕



  • jetzt funktionierts.

    Meine Anweisung in der for-Schleife sieht jetzt folgendermaßen aus:

    dest[i]=arr[b-1];
            b--;
    

    es lag also an dem "-1", dass ich beim ersten mal nicht hatte



  • Zeile 39 ist auch noch Müll, da du den Zielstring nicht vernünftig mit '\0' terminierst.



  • stimmt, habe nun noch nach der for-Schleife:

    dest[i]='\0';
    

    hinzugefügt



  • ich_hasse_C schrieb:

    jetzt funktionierts.

    Meine Anweisung in der for-Schleife sieht jetzt folgendermaßen aus:

    dest[i]=arr[b-1];
            b--;
    

    es lag also an dem "-1", dass ich beim ersten mal nicht hatte

    Es ist aber bei der Berechnung von b besser aufgehoben.



  • ich_hasse_C schrieb:

    dest[i]=arr[b-1];
            b--;
    

    i und b sind gleich wichtig udn tun eigentlich das gleiche, werden hier aber völlig anders angefaßt. das verwirrt mich.



  • volkard schrieb:

    ich_hasse_C schrieb:

    dest[i]=arr[b-1];
            b--;
    

    i und b sind gleich wichtig udn tun eigentlich das gleiche, werden hier aber völlig anders angefaßt. das verwirrt mich.

    char arr[]="Meister";
    char arr1[10];
    
    	size_t len = strlen(arr)-1;
    	size_t i = 0;
    
    	for( ; i <= len; i++ )
    		arr1[i] = arr[len-i];
    	arr1[i] = '\0';
    
    	printf("%s",arr1);
    

Log in to reply