2014-12-29 4 views
-1

Мой код дает ошибку времени выполнения, когда я достигаю середину файла. Если я изменяю значения temp2 или temp1, то он сбрасывается в начале файла. Я не могу понять ошибку, которую я делаю в этом файле.Ошибка времени выполнения в C

Он работает гладко на небольшом файле, который имеет 100 строк.

Я делаю проект поиска файлов, поэтому мне нужно хранить большие файлы, содержащие каталоги всех дисков.

#include<stdio.h> 
#include<string.h> 
#include<windows.h> 
#include<conio.h> 
char file[99999]; 
void brek(char *p, char *q); 
void main() 
{ 
    FILE *fp; 
    int x = 0, y = 0; 
    int a = 0, b = 0; 
    int g = 0; 
    char temp1[10000];   // temp1 is simply for jumping to the date against the given directory or file 
     // the main array storing the lines is temp2. 
    char temp2[1000][1000]; 

    system("chdir C:\\Users\\Faraz\\Documents && dir /s > dir.txt"); 
    fp = fopen("C:\\Users\\Faraz\\Documents\\dir.txt", "r"); 

    while ((y = getc(fp)) != EOF) 
    { 
     file[x] = y; 
     x++; 
    } 
    fclose(fp); 
    file[x] = '\0'; 
    puts(&file[0]); 

    // <----the copying of the file to the string "file (globally declared)"is 
    // done---->// 

    getche(); 
    system("cls"); 

    // <-------------------start loop-------------------->// 

    a = 0; 
    while (file[a] != '\0')  // <-------starting of the loop 
    { 

     while (file[a] != '/') 
     { 
      temp1[a] = file[a]; 
      a++; 
     } 
     temp1[a] = '\0'; 

     a = a - 2; 
     b = 0; 
     while (file[a] != '\n') 
     { 
      temp2[g][b] = file[a]; 
      b++; 
      a++; 
     } 
     temp2[g][b] = '\0'; 
     puts(&temp2[g][0]); 

     g++; 

    } 
    // <-----------------end loop---------------------->// 

} 
+1

Почему вы используете систему, если системные вызовы будут лучше? –

+0

Вам нужно динамическое распределение памяти. –

+0

Да, выше комментариев применяются, но главная проблема заключается в том, что вы используете переменную 'a' для разных вещей в основном цикле: она индексирует как' файл', так и 'temp1'. –

ответ

0

Попробуйте вместо

int 
main(int argc, char **argv) 
{ 
    LPWIN32_FIND_DATAA fdFile; 
    HANDLE hFind = NULL; 
    const char *sPath = "C:\\Users\\Faraz\\Documents\\*.*"; 

    if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE) 
    { 
     printf("no such directory %s\n", sPath); 
     return -1; 
    } 

    do 
    { 
     printf("Directory: %s\n", fdFile->cFileName); 
    } 
    while(FindNextFile(hFind, &fdFile)); //Find the next file. 

    FindClose(hFind); //Always, Always, clean things up! 

    return 0; 
} 
+0

thankyou очень много, но vC++ дает много ошибок на этом ..... что я должен редактировать? – Zimad

+0

Каковы ошибки? –

+0

У меня нет оконной машины, поэтому я не смог протестировать код, покажу мне ошибки, и я постараюсь вам помочь. –

0

ответ я узнал, что вы просто не можете загрузить файл 1gb в памяти на 512 Мб. Таким образом, мы определяем размер буфера в верхней части строки с помощью

#define BUFFER_SIZE 512 

и с помощью fgets мы читаем файл построчно - от - линия, следовательно, не перегружать наше пространство памяти, выделяемый ОС.

Динамическое распределение памяти не является решением нашей проблемы, так как мы начинаем использовать кучу пространства.

Смежные вопросы