fehler



  • Was ist hier falsch?

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

    int main()
    {
    float groesse_in_zoll;
    char groesse_in_cm;

    printf("Ihre Koerpergroesse in cm:");
    gets(groesse_in_cm);
    groesse_in_zoll = atoi(groesse_in_cm) / 2.54;
    printf("Sie sind %.f Zoll gross.\n", groesse_in_zoll);
    fflush(stdin);
    getchar();
    }
    Der Compiler warnt nicht, aber das Programm stürzt ab.



  • dein char groesse_in_cm bietet Platz für genau ein Zeichen, gets() will einen String dort reinpacken (das heißt mindestens 1 Zeichen plus Null-Terminator). Ich würde mal vermuten, anstelle der gets()+atoi() Konstruktion bist du mit scanf() besser augehoben.

    PS: Und flush(stdin) solltest du auch ganz schnell wieder vergessen.



  • marjo schrieb:

    Was ist hier falsch?

    - Keine cpp Tags
    - ein char nimmt nur ein Zeichen auf.

    • gets() erwartet ein char*. Hier warnt der Compiler auch.
    • gets ist nicht sicher gegen Bufferüberlauf
      - das Verhalten von fflush(stdin);[c] ist nicht definiert


  • ... mit einem "scanf" wirklich.
    Der Code ist 1:1 aus einem Lehrbuch abgeschrieben.
    Danke



  • Wer schreibt denn sowas in einem Leerbuch? Ich hätte da zwar einen Verdacht, aber dazu sollen sich andere äußern.



  • Ja wirklich richtig abgetippt?
    Dann würde dieses Beispiel sogar JW Pfusch toppen, wozu schon einiges gehört.
    Jeder normale Compiler sollte hier mind. warnen, welchen Compiler verwendest du denn?

    http://www.ideone.com/W171v



  • CStoll schrieb:

    Wer schreibt denn sowas in einem Leerbuch?

    Wieso? Da stand doch etwas drin 😕



  • DirkB schrieb:

    CStoll schrieb:

    Wer schreibt denn sowas in einem Leerbuch?

    Wieso? Da stand doch etwas drin 😕

    Wenn so ein Code als Beispiel in einem Buch geliefert wird, kann es nur ein Leerbuch sein 😃 (und bestenfalls als Briefbeschwerer geeignet)



  • fflush(stdin); steht im Übrigen in erstaunlich vielen "Fachbüchern". Eigentlich unnötig, sie hätten doch nur mal in dieses Forum schauen müssen.
    (Oder halt in den Standard, aber wenn sie das könnten, müssten sie ihr Geld vielleicht nicht mit halbgaren Leerbüchern verdienen. :))



  • Quelle des Unsinns:
    C für Dummies
    Seite 125

    Gruß Mario



  • Marjo schrieb:

    Quelle des Unsinns:
    C für Dummies
    Seite 125

    Na dann werden sie halt C Dummies 🙂



  • Da sind ja noch mehr Fehler drinn.

    Gruß Mario 😕


Log in to reply