2016-04-17 4 views
-1

Wahrscheinlich eine wirklich einfache Antwort, aber ich kann es jetzt nicht wirklich sehen. Zwei Funktionen:FILE Zeiger nicht in Funktion aktualisiert

#include <stdio.h> 
#include <stdlib.h> 

#define FILMS_FILE "qwerty.txt" 


void InitReading(FILE * input, char * file_name) 
{ 
    input = fopen(file_name, "r"); 

    if (input == NULL) 
    { 
     printf("blabla!\n"); 
     exit(1); 
    } 
} 

void ReadFilms(node * films) 
{ 
    FILE *input = NULL; 
    struct film *film_obj; 

    node *next; 
    bool stop = false; 

    InitReading(input, FILMS_FILE); 

    if (!input) 
    { 
     printf("pointer is null"); 
    } 

    while (!stop) 
    { 
     // do other meaningful stuff 
    } 
} 

Soweit ich weiß, dass der Zeiger immer dann aktualisiert werden soll, und ich sollte keine FILE Zeiger in InitReading() zurückzukehren, aber es scheint, dass input gleich bleibt nach InitReading() Aufruf. Ich habe es bereits behoben, indem ich InitReading() von void zu FILE * Art ändere, aber ich kann nicht herausfinden, warum in der Erde nicht der Zeiger aktualisiert wird.
Vielen Dank.

+1

Nun, der Zeiger "Eingang" sehr gut ** ist ** updated. Verwenden Sie einen Debugger, um es zu sehen. Sie haben wahrscheinlich vergessen, dass C ** streng ** pass-by-value ist. – Olaf

+1

Wenn Sie einen Zeiger bearbeiten möchten, übergeben Sie einen Zeiger an einen Zeiger. – Kiloreux

+0

einen Wert ändern, einen Zeiger übergeben, einen Zeiger ändern einen Zeiger auf einen Zeiger übergeben. – Thomas

Antwort

0

In C sind Funktionsargumente übergeben von Wert und Modifikation von Argumenten in Aufgerufenen nicht Auswirkungen auf lokale Variablen des Aufrufers.

Sie können Zeiger auf lokale Variablen verwenden, damit sie von Angerufenen geändert werden.

#include <stdio.h> 
#include <stdlib.h> 

#define FILMS_FILE "qwerty.txt" 


void InitReading(FILE ** input, char * file_name) 
{ 
    *input = fopen(file_name, "r"); 

    if (*input == NULL) 
    { 
     printf("blabla!\n"); 
     exit(1); 
    } 
} 

void ReadFilms(node * films) 
{ 
    FILE *input = NULL; 
    struct film *film_obj; 

    node *next; 
    bool stop = false; 

    InitReading(&input, FILMS_FILE); 

    if (!input) 
    { 
     printf("pointer is null"); 
    } 

    while (!stop) 
    { 
     // do other meaningful stuff 
    } 
} 
+0

Fehlermeldungen bei Standardfehler? –

+0

'printf (" Zeiger ist Null ");' Nvrrer erreichen diesen Punkt. : D – BLUEPIXY