Wo ist da der Fehler??



  • brauche funktion die enen string umkehrt !

    hab sowas zusamen gebastelt!

    wo ist da der fehler??

    #include <stdio.h>
    #include <string.h>
    
    char *strrevptr(char *pstr);
    
    int main(void)
    
    {
    char str[10];
    
    printf ("string angeben   :");
    
    scanf("%s",str);
    
    printf("%s",strrevptr(str));
    
    }
    
    char *strrevptr(char *pstr)
    {
    #define ARRSIZE ((int)(sizeof pstr / sizeof pstr[0]))
    int i;
    char *hp;
    printf("neuer string     :");
    for ( i = ARRSIZE ; i > 0; i--)
    {
    pstr[i]=hp[ARRSIZE-i];
    }
    
    return hp;
    }
    


  • ruecke deinen code ordentlich ein, sonst wird dir nicht geholfen.

    char *strrevptr(char *pstr)
    {
        int arrsize = strlen(pstr); // so geht das. makros willst du nicht verwenden. aussderdem ist sizeof pstr == 4, weil pstr ein pointer ist
        int i;
        char *hp; // warum wird hp niemals etwas zugewiesen?
        printf("neuer string     :");
        for ( i = arrsize; i > 0; i--) // der ganze loop samt koerper ist falsch
        {
            pstr[i]=hp[ARRSIZE-i];
        }
    
        return hp;
    }
    


  • wenn ich es so schreibe dann gets mehr oder weniger!

    char *strrevptr(char *pstr)
    {
    #define ARRSIZE ((int)(sizeof pstr / sizeof pstr[0]))
    int i;
    printf("neuer string     :");
    for ( i = ARRSIZE ; i > -1; i--)
    {
    printf("%c",pstr[i]);
    }
    
    return 0;
    }
    

    ich muss aber die funktion verketen und wie ich es mit dem return mache weiss ich net!

    noch ne frage warum sizeof pstr == 4? ist das kein array??
    und wie gehts dan mit der schleife??



  • "mehr oder weniger"?!?! wenn es nicht geht, dann geht es *nicht*. du kriegst bestenfalls 4 zeichen angezeigt und dein programm ist einfach ein grosser fehler. sei dir dessen bewusst, sonst kann ich es gleich bleiben lassen, dir zu helfen.

    mach es nicht mit dem #define. machs einfach nicht. nein.

    pointer und arrays sind nicht das gleiche. deswegen ist sizeof(array) die laenge des arrays in bytes und sizeof(pointer) je nach prozessor 1, 2, 4 oder 8.

    printf hat in der strrev funktion nichts verloren. in der ganzen funktion hast du nichts auszugeben.

    die for-schleife solltest du aufwaerts und nicht abwaerts laufen lassen.

    nicht return 0, sondern return pstr, sonst ist der rueckgabewert nutzlos und dein programm ist falsch.



  • char *strrevptr(char *pstr)
    {
    int arrsize = strlen(pstr);
    int i;
    char *hp;
    printf("neuer string :");
    for ( i =0; i > arrzise/2; i++)
    {
    pstr+i=hp+arrsize-i
    }

    return hp;

    ist das so richtig??

    erster zeichen wird am ende des hp gespeichert???
    kanst du mir das mit dem return hp erklären?? wie ich da nen string rein bekomme??



  • John Doh schrieb:

    char *strrevptr(char *pstr)
    {
    int arrsize = strlen(pstr);
    int i;
    char *hp;
    printf("neuer string :");
    for ( i =0; i > arrzise/2; i++)
    {
    pstr+i=hp+arrsize-i
    }

    return hp;

    ist das so richtig??

    Ne, Codetags fehlen.



  • John Doh schrieb:

    ist das so richtig??

    niemals. das compiliert noch nicht mal. probier den:

    void rev (char *in, char *out)
    {
       out += strlen(in);
       *out = 0;
    
       while (*in)
          *--out = *in++;
    }
    

    musste eventuell umbauen wegen rückgabewert und so...


Log in to reply