Frage zu Code (Verständnisproblem)



  • Hallo,
    ich bin gerade dabei, die Programmiersprache c zu lernen und verwende hierfür das Buch "Programmieren in C". Bis jetzt komme ich gut zurecht, jedoch kann ich ein abgedrucktes Beispiel nicht nachvollziehen.

    Es wäre sehr nett, wenn mir helfen könnte! Hier der Code:

    #define MAXLINE 1000
    
    main()
    {
     int len;
     int max;
     char line[MAXLINE];
     char save[MAXLINE];
    
     max=0;
     while((len=getline(line,MAXLINE))>0)
    	if(len>max) {
    		max=len;
    		copy(line,save);
    	}
    if (max>0)
    	printf("%s",save);
    }
    
    getline(s,lim)
    char s[];
    int lim;
    {
     int c,i;
    
     for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n';i++)
    	s[i]=c;
     if(c=='\n') {
    	s[i]=c;
    	i++;
     }
     s[i]='\0';
     return(i);
    
    }
    
    copy(s1,s2)
    char s1[],s2[];
    {
     int i;
    
     i=0;
     while((s2[i]=s1[i])!= '\0')
    	i++;
    }
    

    Nun meine Frage: wie kommt die Benutzereingabe in die Variable line? Denn normalerweise wird doch in der Funktion getline die Benutzereingabe in den Array s[] geschrieben, der jedoch extern (da es sich um eine automatische Variable handelt) nicht verfügbar ist, oder? Dann wüsste ja copy nicht, was es kopieren soll, denn der Array line der Hauptfunktion wäre doch leer?!

    Ich wäre für Hilfe wirklich sehr dankbar, ich brüte jetzt schon ewig über diesem Problem!
    😕 Übrigens: Bin ich da allein, oder kann es sein, dass "Programmieren in C" ein bisschen wenig Erläuterungen liefert? Es steht zwar alles drin, aber irgendwie ... Gibt es vielleicht noch ergänzende Bücher/Sites? Ich habe vorher mit basic programmiert und bis jetzt gefällt mir c eigentlich ganz gut; das ist an vielen Stellen viel kompakter und klarer.

    Wie gesagt, nochmals vielen Dank für eure Hilfe schon im voraus!
    🙂



  • noctua schrieb:

    Nun meine Frage:

    Ist jetzt zwar etwas OffTopic, aber kannst du mir sagen, woher diese merkwürdige Sitte stammt, eine Frage derart anzukündigen?

    Denn normalerweise wird doch in der Funktion getline die Benutzereingabe in den Array s[] geschrieben, der jedoch extern (da es sich um eine automatische Variable handelt) nicht verfügbar ist, oder?

    s ist keine normale Autovariable, sondern ein Parameter von getline. Da Arrays beim Funktionsaufruf nicht kopiert werden, verweist s auf denselben Speicherbereich wie das Array, mit dem die Funktion aufgerufen wurde. Das gleiche gilt für copy.



  • MFK schrieb:

    noctua schrieb:

    Nun meine Frage:

    Ist jetzt zwar etwas OffTopic, aber kannst du mir sagen, woher diese merkwürdige Sitte stammt, eine Frage derart anzukündigen?

    Sorry, ist mir halt einfach so eingefallen. Aber jetzt wo du's sagst, klingt schon merkwürdig 🙂 !

    s ist keine normale Autovariable, sondern ein Parameter von getline. Da Arrays beim Funktionsaufruf nicht kopiert werden, verweist s auf denselben Speicherbereich wie das Array, mit dem die Funktion aufgerufen wurde. Das gleiche gilt für copy.

    Vielen Dank! Du weißt gar nicht, wie sehr du mir geholfen hast. Und ich plage mich tagelang mit dieser Frage.
    Superschnelle und prägnante Antwort!
    👍



  • du solltest dir ein neues C buch anlegen..

    getline(s,lim)
    char s[];
    int lim;
    {
    .
    .
    .
    }

    wo gibts denn sowas noch ._O wurde das im K&R nich als deprecated bezeichnet



  • wie geht das ??

    main()
    

    oder das

    getline(s,lim)
    

    mit was hast du das kompiliert?? wahrscheinlich 1234 wahrnungen oder??
    apropo das gehört sicher nicht in ansi c denn dass ist sicherlich kein ansi c standart!!!!!!



  • Stimmt dieser Stil ist eindeutig veraltet!

    Auch wenn "Programmieren in C" ziemlich bekannt, und manche werden behaupten ein "Standardwerk" ist, solltest du mit der Zeit gehen.
    Ich kann dir das Buch: "C von A bis Z" von Jürgen Wolf empfehlen. Das ist super.
    Oder du kannst dir ja auch ein paar Tutorials ansehen.

    mfg LastManStanding



  • also das openbook von "c von a bis z" findest du auf pronix.de



  • --linuxuser-- schrieb:

    also das openbook von "c von a bis z" findest du auf pronix.de

    Danke schön, das werde ich mir ansehen! Ich habe eigentlich keine Warnungen erhalten. Hab's unter Linux mit cc kompiliert und zwar ohne Probleme.
    Gut, dass ihr mir das sagt. Also ist das Buch wohl eher nicht so ratsam.
    Ich werd's dann mal mit dem "c von a bis z" versuchen!

    Zu meiner Verteidigung: Mir wurde gesagt, dass es sich um ein sogenanntes "Standardwerk" handelt (dass der stil schon veraltet ist, wusste ich nicht!).

    Nochmals Danke für die Tipps!



  • Hmm, anscheinend hast Du die alte, erste Auflage von dem Buch (es geht doch um "Programmieren in C" von Kernighan & Ritchie?), es gibt auch eine, die so um 1990 erschienen ist und das typische ANSI C beschreibt (ohne ein paar Spezialänderungen von 1999, aber die braucht man eh ziemlich selten).

    Auch die alte Auflage ist nicht schlecht sondern eben alt (und die Übersetzung ist etwas daneben, naja) und darum zum lernen des aktuellen Cs eher ungeeignet, auch wenn die Änderungen nicht so groß sind. Es ist aber ein gutes Buch um programmieren (also analytisch problemzerlegend denken) zu lernen. Wegwerfen würde ich es nicht. Du kannst dir ja die Unterschiede zwischen dem damaligen C und heute notieren und die Übungen durcharbeiten. Das ist sicher sehr lehrreich.



  • Stimmt!
    Außerdem gibt's auf Pronix noch das openbook zu "Linux/Unix Programmierung" auch sehr empfehlenswert.

    Und ich bin mir sicher, dass Kerninghan und Ritchie ziemlich gute Algorythmen und technicken beschreiben, die du mit ein paar wenigen änderungen übernehmen kannst.

    mfg LastManStanding



  • @LastManStanding
    ich bin voll deiner meinung :-)))))


Anmelden zum Antworten