2016-04-03 8 views
0

die Schleife geht nur durch 0-9 der Ausgang ist dies. der Fehler im bekommen 6 abbrechen, im nicht sicher, was es bedeutet,Erstellen von Dateien in c bekommen Abbruch: 6 Fehler

1.txt 38 
    2.txt 5 
    3.txt 6 
    4.txt 24 
    5.txt 17 
    6.txt 12 
    7.txt 34 
    8.txt 30 
    9.txt 6 
    Abort trap: 6 

auch unter dem Code die gleichen Zufallszahlen erzeugt jeder laufen, wie kann ich es zufällig machen

void save(char *, int); 
void create(char *, int); 
void close(); 
FILE * list; 
FILE * file; 
int main(void) 
{ 
    char ext[4] = ".txt"; 
    static const int MIN = 1 ; 
    static const int MAX = 40 ; 
    int rdm , fsize; 


    list = fopen("filelist.txt","w"); 
    char str[2]; 

    //char str3[6]; 
    list = fopen("filelist.txt", "a+"); 


    for(int i = 0 ; i < 10 ; i ++) 
    { 
     sprintf(str,"%d",i+1); 

     char * str3 = (char *) calloc(1,1 + strlen(str)+ strlen(ext)); 
     //file = fopen(str3,"r"); 
     strcat(str3,str); 
     strcat(str3, ext); 
     // printf("%s \n",ext); 
     //strcat(str3, ext); 
     rdm = (rand()%(MAX-MIN)+MIN); 
     printf("%s %i \n",str3, rdm); 
     save(str3 , rdm); 
     create(str3 , rdm); 
     // printf("%s \n",ext); 

    } 
    close(); 
} 

void save(char * fname , int sz) 
{ 

    fprintf(list , "%s %d %d \n" , fname , sz , sz*512); 

} 

void create(char * fname , int sz) 
{ 
    file = fopen(fname, "w"); 
    fseek(file, sz*512, SEEK_SET); 
    fputc('\n', file); 
    fclose(file); 

} 

void close() 
{ 
    fclose(list); 

} 
+1

'char ext [4] = ".txt";'. Das erzeugt keine gültige NUL-terminierte Zeichenfolge. Ändern Sie es in 'char ext [] =" .txt "' oder 'char ext [5] =" .txt "'. – kaylum

+1

Zum einen ist 'str' zu klein. Sie benötigen 2 Byte für die Zahl (da sie bis zu 10 beträgt) plus 1 Byte für das abschließende Nullbyte. Das sind 3 Bytes. –

+0

Nur ein freundlicher Tipp, sollten Sie diese Seite lesen: [How-To-Ask Leitfaden] (https://stackoverflow.com/help/how-to-ask), so dass Sie immer sicher sein können, dass Ihre Fragen sind leicht zu beantworten und so klar wie möglich. Stellen Sie sicher, dass Sie alle Anstrengungen unternommen haben, die Sie unternommen haben, um das Problem zu beheben, das Sie haben, und was passiert ist, als Sie diese Korrekturen versuchten. Vergessen Sie auch nicht Ihren Code und eventuelle Fehlermeldungen! –

Antwort

1

Es gibt auf mindestens drei Dinge hier:

Erstens Ihre Hauptfunktion zurückgibt int:

int main() 

Also, im Erfolgsfall für die Ausführung von Code, sollten Sie 0 in der allerletzten Zeile zurück:

...//all other lines 
return 0; //no error 

Zweitens rand() ist zufällig Pseudozufall. Es erzeugt jedes Mal eine vorbestimmte Zufallszahl entsprechend der Zufallszahl, die verwendet wird. Um den Wert von rand() jederzeit ändern zu lassen, sollten Sie Zeit in srand() als zufälligen Seed angeben. Dann ändern sich Ihre zufälligen Werte entsprechend der Zeit.

#include <time.h> 
... 
srand(time(NULL)); // randomize seed 
//do it once before you use rand() 

Drittens so kommentierte: Ihre char-Arrays Größe scheint klein zu sein:

char ext[5] = ".txt"; //should be 5, the last one will be \0 
... 
char str[15]; //should be large enough for your text