Finde den Fehler nicht: Dyn Speicherreservierung



  • habs jetzt gelöst...

    und zwar so....

    #include <stdio.h>
    #include <string.h>
    #include <fb5.h>
    
    void main(void) {
    
    char *string=NULL, temp;
    int n=0,i;
    
    while(1) {
    	scanf("%c",&temp);
    
    	if(temp == 10)
    		temp = '\0';
    
    	n++;
    	string = (char *) realloc(string,n * sizeof(char));
    	if (string == NULL)
    		exit(1);
    
    	*(string+(n-1)) = temp;
    	if(temp == '\0')
    		break;
    
    }
    
    printf("\n\n");
    
    printf("%s",string);
    
    printf("\n\n\n");
    }
    

    Gruß
    Sascha



  • also, ich sehe noch einige:

    1. void main 🙄 main ist immer int
    2. main liefert nichts zurück (siehe 1)
    3. realloc castet man nicht
    4. realloc falsch verwendet

    Tipp: Um eine ganze Zeile zu lesen, verwendet man eher man: fgets(3)



  • supertux schrieb:

    2. main liefert nichts zurück (siehe 1)

    doch, wenn man das 'return' weglässt, liefert main '0' zurück.
    🙂



  • Guten morgen,

    ja das mit dem main Rückgabe wert weiß ich, aber für die Übungen gehts halt auch so.

    Was mich jetzt etwas verwundert ist das casten von ralloc, also sowohl in meinen Vorlesungsunterlagen wie auch in "C von A bis Z" wird realloc gecastet?!



  • Sasa schrieb:

    ...also sowohl in meinen Vorlesungsunterlagen wie auch in "C von A bis Z" wird realloc gecastet?!

    tja, so'n cast ist schlechter stil. es geht zwar auch mit, aber er ist genau so überflüssig wie zwei semikolons am ende jeder anweisung.
    'c von a-z' ist übrigens nicht sehr empfehlenswert.
    🙂



  • ah siehste wieder was gelernt. Bis jetzt hat ich das Buch für nen gutes Nachschlagewerk gehalten.. ich glaube jetzt muss ich meinem Prof gleich mal auf die Füße treten. Mal gucken wie er sich da rausredet!
    😉

    Gruß
    Sascha



  • Sasa schrieb:

    .. ich glaube jetzt muss ich meinem Prof gleich mal auf die Füße treten. Mal gucken wie er sich da rausredet!

    Schlechter Stil alleine ist kein Argument, sondern nur eine Behauptung. Die Begründung findest Du hier: http://www.c-plusplus.net/forum/viewtopic.php?t=206606

    Was übrigens auffällt, daß gerade verdammt viele unterwegs sind, die malloc() & Co unbedingt casten wollen ... :p



  • Also ich hab ihn heute mal drauf angesprochen, und er meinte:

    "Früher hätte er das auch nicht gecastet, aber ihm sei mal nen Compiler untergekommen der realloc erst richtig verstanden hat als er den cast operator da vor geschrieben hat. Aus dem Grund hat er sich das angewöhnt."

    Aber wie ich dem Link oben entnehme, kommt das nur noch bei wirklich alten Compilern vor.

    Aber gut, dass wir drüber gesprochen haben, so kann ich den Fehler wenigstens vermeiden.

    Besten Dank nochmal!

    Gruß
    Sascha



  • Sasa schrieb:

    "Früher hätte er das auch nicht gecastet, aber ihm sei mal nen Compiler untergekommen der realloc erst richtig verstanden hat als er den cast operator da vor geschrieben hat. Aus dem Grund hat er sich das angewöhnt."

    so ein Blödsinn, du kannst ihm mal sagen, dass er am wahrscheinlichsten realloc falsch verwendet und genau diese die Ursache dafür ist, warum sein realloc nicht funktioniert hat. Oder er kompiliert C Code mit einem C++ Compilier 🙄



  • Du kannst ihm vor allem mal sagen dass er gerne auch hinterfragen darf, warum das bei diesem einen Compiler so ist. Sich selbst etwas falsches angewöhnen (und das auch noch seinen Schülern beibringen), weil ein Compiler angeblich (siehe supertux) nicht ohne funktioniert, ist ganz ganz ganz mieser Stil.



  • Na ich werd es mal bei Gelegenheit mit ihm ausdiskutieren.
    Und mal davon abgesehen halte ich ziemlich viel von Ihm als Prof, es ist halt niemand unfehlbar.
    Viel schlimmer finde ich, dass es sogar in der Literatur falsch verwendet wird, weil dann wär ich sicherlich schon früher darüber gestolpert und hätte es mal hinterfragt!

    Aber zum Glück hab ich ja euch! 😉


Anmelden zum Antworten