2015-10-27 3 views
0

Я немного запутался здесь, не совсем уверен в этом. То, что я пытаюсь сделать, - передать имя файла через terminal/cmd, который будет открыт и прочитан.Передача указателя FILE на функцию

myfunction(char* fileName, FILE* readFile) 
{ 
    if((readFile = fopen(fileName,"r")) == NULL) 
    { 
     return FILE_ERROR; 
    } 
    return FILE_NO_ERROR; 
} 

int main(int argc, char **argv) 
{ 
FILE* openReadFile; 
    if(myfunction(argv[1], openReadFile) != FILE_NO_ERROR) 
    { 
     printf("\n %s : ERROR opening file. \n", __FUNCTION__); 
    } 
} 

Мой вопрос, если я передать указатель на openReadFilemyfunction() будет readFile указатель на открытый файл будет сохранен в openReadFile указатель или мне нужно поставить *readFile при открытии.

+2

Вам нужно передать '& openReadFile' в функцию, если вы хотите, чтобы обновленный указатель передавался вызывающему. Объявление параметра функции будет 'FILE ** readFile' –

+2

... или передать успешный указатель назад как значение функции, или' NULL'. –

+0

Не могу ли я просто разыграть readFile при fopen-ing? –

ответ

3

FILE * должен быть указателем, поэтому в основном openReadFile остается указателем. myfunction принимает **, поэтому мы можем обновить FILE * с помощью результата fopen *readFile = fopen... обновляет указатель.

int myfunction(char* fileName, FILE** readFile) /* pointer pointer to allow pointer to be changed */ 
{ 
    if((*readFile = fopen(fileName,"r")) == NULL) 
    { 
     return FILE_ERROR; 
    } 
    return FILE_NO_ERROR; 
} 

int main(int argc, char **argv) 
{ 
    FILE* openReadFile; /* This needs to be a pointer. */ 
    if(myfunction(argv[1], &openReadFile) != FILE_NO_ERROR) /* allow address to be updated */ 
    { 
     printf("\n %s : ERROR opening file. \n", __FUNCTION__); 
    } 
} 
+0

Спасибо @Weather Vane для обновления – mksteve

+1

Думаю, я получил его, если бы у меня был только один '*' в 'int myfunction (char * fileName, FILE ** readFile)' i будет существенно меняться на то, что указывает readFile, и с двойным изменением '*' im, на которое указывает указатель из main. Ура. –

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