2013-04-25 3 views
2

Мне нужно переназначить один указатель на несколько файлов последовательно.переназначить указатель файла в цикле

У меня есть пути к файлу правильно в строковом пути.

, когда я прохожу путь и файловый указатель на функцию, чтобы переназначить, я получаю «Отменено (ядро сбрасывали)» ..

FILE * fptr;  //Global file pointer 
FILE * getfptrr(char * path) 
{ 

    fclose(fptr); 
    fptr = fopen(path, "r"); 

    if(fptr!=NULL) 
     return fptr; 
    else 
    { 
     printf("\n Something's Wrong!!! \n"); 
     exit(1); 
    } 
} 

Должен ли я использовать frepoen ?? и как ...

Или любые другие варианты?

ответ

4

Вы не проверяете, что fptr не NULL, прежде чем звонить по телефону fclose.

Initialize fptr к NULL в определении, а затем проверить, что это не NULL перед вызовом fclose (или freopen, который на самом деле то, что вы делаете здесь).

+0

Действительно, в отличие от 'free',' fclose' не принимает нулевые указатели (передача нулевого указателя на 'fclose' является неопределенным поведением). – Medinoc

0

Вы называете функцию Close():

[1] В качестве способа инициализации указателя файла?

[2] Или вы пытаетесь закрыть ранее открытый файл?

Если это так:

[1] Вы можете инициализировать указатель со следующим:

fptr = NULL; 
    fptr = fopen(path, "r"); 

[2] Я бы предложил назвать близко() в одной и той же функции, где Еореп() является использовано

Я рекомендую вам использовать код возврата ошибки вместо exit(), поскольку это более изящный способ завершить вашу программу. Коды ошибок облегчают отладку и следуют логике программы, чем функции exit() во всем коде.

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