2015-10-27 246 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嗎? –

回答

3

FILE *需要是一個指針,所以在主openReadFile保持爲一個指針。 myfunction需要**,所以我們可以更新文件*結果從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)'我將基本上改變readFile指向的內容,並且使用雙'*'im改變main指向哪個指針。好極了。 –