kurzer code stürzt ab. keine ahnung woran es liegt!



  • hi folks!

    also, ich habe hier einen recht kurzen code, der mir sagen soll wieviele dateien von 00000.dat bis XXXXX.dat in einer ungebrochenen reihe im selben ordner existieren.
    leider stürzt es nur ab.......

    hier der C-code:

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
    
        FILE *checkfile;
    
        char currentFileName;
        int filecount = 0;
        int lastfile = 0;
    
        while(lastfile==0)
        {
    
            sprintf(&currentFileName, "%05d.dat", filecount);
    
            checkfile = fopen(&currentFileName, "r");
            if(checkfile==NULL)
            {
    
                fclose(checkfile);
                lastfile = 1;
    
            }
    
            fclose(checkfile);
            filecount++;
    
        }
    
        printf("%d\n", &filecount);
    
        return 0;
    }
    

    falls jemand zudem eine einfachere (ANSI-C konforme) lösung hat, bitte posten!!!

    danke im voraus,
    greets,

    ---loki



  • Probiers mal so:

    if (checkfile==NULL)
    {
    	fclose (checkfile);
    	lastfile=1;
    }
    else 
    {
    	fclose (checkfile);
    	filecount++;
    }
    


  • Hallo,

    einige Fehler waren enthalten (ein einziges Zeichen Platz für currentFileName zu reservieren, ist nicht gerade geeignet, einen Absturz zu verhindern, wenn die Dateinamen einschließlich terminierender Null mindestens 10 Zeichen Platz benötigen, außerdem gibt man bei printf nicht die Adresse von filecount aus, sondern die Variable direkt, die Abbruchbedingung sollte das Überschreiten des Maximal-Wertes sein), und einiges kann man verkürzen, so daß es trotzdem noch lesbarer Code bleibt:

    #include <stdio.h>
    
    #define MAXNUMBER 99999
    
    int main(int argc, char *argv[]) 
    { 
        FILE *checkfile;
        char currentFileName[10]; 
        int filecount = 0; 
    
        while(filecount <= MAXNUMBER) 
        { 
            sprintf(currentFileName, "%.5d.dat", filecount); 
    
            if(!(checkFile = fopen(currentFileName, "r"))) break;
    
            fclose(checkfile); 
            filecount++; 
        } 
    
        printf("%d\n", filecount); 
    
        return 0; 
    }
    

    MfG



  • noch ein kleiner +/-1-Fehler 🙂 :

    printf("%d\n", filecount > MAXNUMBER ? MAXNUMBER : filecount);
    

    MfG



  • ok, vielen dank. funktioniert jetzt. war ja wirklich ein etwas dummer fehler...


Anmelden zum Antworten