Pointer, calloc, string prob



  • hi und zwar hab ich folgendes prob:

    ich soll ein string einlesen, der aber dynamisch gross sein soll, und diesen dann umdrehn. Ja leichter gesagt als getan ich hab scho bissl was gemacht aber funzt net: könntet ihr mir plzz helfen ^^ thx.

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    int laenge,i,tmp;
    printf("Wie lang soll ihr Wort sein: ");
    fflush(stdin);
    scanf("%d",&laenge);

    char*wort=calloc(laenge+1,sizeof(char));
    char**umwort=calloc(laenge+1,sizeof(char));
    printf("Geben Sie ihr Wort ein: ");
    fflush(stdin);
    scanf("%s",&wort);

    tmp = laenge-1;
    for(i=0;i<laenge;i++)

    {
    **umwort[i]=*wort[tmp];
    tmp--;
    }

    printf("%s",*umwort);

    system("PAUSE");
    return 0;
    }



  • Für 'umwort' benötigst du auch nur einen einfachen Pointer und keinen Doppelzeiger.

    (btw, und fflush(stdin) ist böse)



  • ich habs au scho mit umwort[i]=wort[tmp] versucht, klappt aber au net 😞 es kommt immer "Problem bericht senden" von windows.

    was könnte ich statt fflush(stdin); verwenden?



  • Falsche Stelle - ersetz mal den Doppelzeiger ** durch einen einfachen Zeiger, dann sollte es eigentlich passen:

    char*wort=calloc(laenge+1,sizeof(char)); 
    char*umwort=calloc(laenge+1,sizeof(char));
    ...
    for(i=0;i<laenge;i++) 
    { 
      umwort[i]=wort[tmp]; 
      tmp--; 
    }
    

    (und schau dir mal im Debugger an, was da passiert)



  • naja mein prog schaut so aus au ohne doppelzeiger geht es net.. wtf ich weiss net worans liegt..

    int main(int argc, char *argv[])
    {
        int laenge,i,tmp;
        printf("Wie lang soll ihr Wort sein: ");
        fflush(stdin);
        scanf("%d",&laenge);
    
        char*wort=calloc(laenge,sizeof(char));
        char*umwort=calloc(laenge,sizeof(char));
        printf("Geben Sie ihr Wort ein: ");
        fflush(stdin);
        scanf("%s",&wort);
    
        tmp = laenge-1;
        for(i=0;i<laenge;i++)
    
        {
          umwort[i]=wort[tmp];
          tmp--;
          }
    
          printf("%s",*umwort);
    
      system("PAUSE");	
      return 0;
    }
    


  • also mir sind n paar sachen aufgefallen:
    zum einen musst du nicht

    scanf("%s", &wort);
    //sondern:
    scanf("%s", wort);
    

    verwenden.
    bei der ausgabe auch:

    printf("%s", umwort);
    

    und zudem sollte der string dann auch nullterminiert sein, also am ende von umwort noch '\0' anhängen. dann sollte es gehen



  • jooo alles klappt besten dank =)))


Anmelden zum Antworten