Array über Funktion an Pointer übergeben



  • Hey, bin noch nicht wirklich weit mit den Pointern, bin jetz an der ersten Umsetzung des Konzeptes.

    Ich hatte jetzt vor aus einer datei Zahlen auszulesen, bin derzeit aber noch bei dem Schritt über eine Funktion die Quelldatei zu ermitteln.

    In der input() soll per Eingabe aus stdin der Pfad gelesen werden und über einen Pointer gleich an main() { char *quellpfad[PFADLAENGE] } übergeben werden.
    Ich hoffe ihr versteht, was ich meine.

    Das listing

    #include <stdio.h>
    #define PFADLAENGE 300
    
    int input(char *pfad[]);
    void sortieren();
    void output();
    
    int main ()
    {
        int k, result;
        char *quellpfad[PFADLAENGE], *zielpfad[PFADLAENGE];
    
        printf("Program zum sortieren von Zahlen aus Daten\n");
        result=input(quellpfad);
        printf("input beendet %i\n",result); 
    
        scanf("%i",k);
    }
    
    int input(char *quellpfad[PFADLAENGE])
    {
        char *pfad[PFADLAENGE];
        //printf("Adresse Anfang %p Adresse Ende %p\n",&quellpfad,&quellpfad[PFADLAENGE]);
        printf("Gib den Pfad zur Quelldatei an : ");
        fgets(*quellpfad,PFADLAENGE,stdin);
        printf("\nPfadeingabe registriert\n");
        printf("Pfad ist %s",pfad);
        return 1;
    }
    

    Ich hab jetz das Problem, dass wenn ich die Eingabe aus stdin an *quellpfad übergeben lasse stürzt das Programm ab, konnte den Fehler noch nicht wirklich eingrenzen, da ich wie gesagt erst anfange mit pointern zu arbeiten.

    Hab ich da nen Denkfehler oder Syntaktischen unsinn stehen ?
    Wäre interessant zu erfahren, was das Problem ist.
    Dank euch.



  • erst das kapitel im buch über pointer lesen und dann rumprobieren, bitte nicht umgekehrt. ich hab jetzt keine lust dir zu erklären wie pointer funktionieren, das steht in JEDEM der schätzungsweise 10.000.000.000 bücher über c programmierung. dein code lässt erkennen, daß du dich definitiv noch nicht genug mit pointern befasst hast, als daß du schon versuchen solltest, sie zu benutzen. also lies bitte erst noch etwas mehr nach und dann frag nochmal.



  • Ja an sich kein schlechter Tip, muss dazu sagen, dass ich durchaus schon vorher nachgelesen hab. Gut kann jetz nicht einschätzen, wie schlecht der Code is, aber das Buch, dass ich vor mir hab behandelt das Thema zwar gut, aber wenig verständlich.
    Da sind grundsätzlich nur Fragmente von pointern drin.
    Ich hab gesehen, dass einige Fehler drin waren, die ich jetz schon ausgebessert hab, aber es funktioniert immer noch nicht.

    So falsch kann der Code doch kaum sein, da der schon nach Anleitung aus nem Buch geschrieben wurde.
    Mir würde es auch mehr helfen, wenn du mir sagen könntest wo ich Mist geschrieben hab, als mir zu sagen ich kann es nicht, das hab ich selbst auch schon gemerkt 😉



  • So hab mir nochmal nen anderes Buch zur Hand genommen, da wurde die Sache schon klarer. Jetz weiß ich, dass ich falsch angesetzt hab, dass das schon eher blödsinn war, den ich da gemacht hab.

    Werd mich nochmal ransetzen und nen ordentlichen Code verfassen, den ich euch dann zeige, obs dann mehr Sinn ergibt.



  • Ahh Fehler gefunden, hatte fälschlicherweise n PointerArray angelegt, was ich hier garnicht haben wollte, den Rest hab ich noch angepasst. Funzt jetz.
    Also so falsch wars dann doch nicht. Auch, wenn ich vieles berichtiges musste 😃

    Hat sich also erledigt..



  • ZSchneidi schrieb:

    Ahh Fehler gefunden, hatte fälschlicherweise n PointerArray angelegt, was ich hier garnicht haben wollte, den Rest hab ich noch angepasst. Funzt jetz.
    Also so falsch wars dann doch nicht. Auch, wenn ich vieles berichtiges musste 😃

    Hat sich also erledigt..

    Hallo
    kannst du dann deine korrigierte Version auch bitte posten?



  • Klar, wenn es dir was nützt. 🙂
    Is jetz nur das drin, was auch relevant ist. Wenn jemand verbesserungsvorschläge hat, bin ich ganz Ohr.

    int input(char *pfad);
    
    int main ()
    {
        int i, k, result, gltk=0;
        char c, quellpfad[PFADLAENGE], zielpfad[PFADLAENGE]; 
        char dateiinhalt[MAXINHALT];
        char *pfadzeiger,*inhaltzeiger;
        FILE *quellad, *zielad;
        pfadzeiger = quellpfad;
        inhaltzeiger = dateiinhalt;
       do
       {
        input(pfadzeiger);
        quellad = fopen(quellpfad, "r");
        if(quellad == 0)
          printf("error:\n");
        else
          gltk = 1;
       }while(gltk ==0 );  
        while((c=fgetc(quellad)) != EOF)
             printf("%c",c);
        rewind(quellad);
        instream(quellad, dateiinhalt);
        getch();
    }
    
    int input(char *quellpfad)
    {
        fgets(quellpfad,PFADLAENGE,stdin);
        quellpfad[strlen(quellpfad)-1] = '\0';
        return 1;
    }
    

Log in to reply