Kann mir sagen, wo hier in dem Programm noch Fehler sind?



  • Helft mir bitte weitere Fehler zu finden!

    Habe eine Datei mit dem Namen: demo_warning.c benutzt. Habe sowohl -Wall und -O6 (höchste Codeoptimierung), aber auch den Debugger gdb ausprobiert.

    Hier ist der Quellcode:

    // A very strange C program
    // compile with: gcc demo_warning.c
    // run: ./a.out
    // compile again: gcc -Wall demo_warning.c
    // compile again: gcc -Wall -O6 demo_warning.c
    // compile again: gcc -ansi -Wall -Werror demo_warning.c
    // gdb can help us to find the segmentation fault

    // assume we are to lazy to type this: #include <stdlib.h>

    main (int argc, char** argv) {
    int i, j, n;
    double a;

    /************* long *************/
    i = atol (argv[1]);
    printf ("parameter1 has numeric int value %d, n = %d\n", i, n);

    if (i=7)
    printf ("parameter1 is seven\n");

    /************* double float *************/
    a = atof (argv[1]);
    printf ("parameter1 has numeric value (double float) %f\n", a);
    printf ("parameter1 interpreted as int: %d\n", a);

    /************* scanf *************/
    printf ("enter a number: ");
    /* fflush (stdout);
    /* use fflush to print "enter a number: " without newline */

    scanf ("%d", j);
    printf ("j = %d\n", j);
    }

    Folgende Fehler sind bereits gefunden, ob es stimmt, da bin ich mir unsicher!

    i sollte vom typ "long int" sein, und dann wird das mit "%ld" ausgegeben. n ist in deinem ersten printf noch nicht initialisiert und hält daher undefinierte werte.

    if(i==7) statt i=7

    wenn du schon dein double als int ausgeben willst, dann caste das doch bitte richtig.

    scanf("%d",&j) statt scanf("%d",j) da ja ein zeiger auf ein int benötigt wird...

    main() in c braucht ein return statement und damit schaut das ganze dann so aus: "int main(...)"

    Folgende Tipps: Der Weg der Kommandozeilenargumente durch atol bis zum printf
    sollte noch untersucht und beschrieben werden, da geht viel schief.
    Gesucht ist die Erklärung, was falsch ist und warum.




Anmelden zum Antworten