FILE指针未在功能中更新

时间:2016-04-17 22:01:50

标签: c pointers

可能是一个非常简单的答案,但我现在还不能真正看到它。两个功能:

#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
    }
}

据我所知,指针应始终更新,我不必在FILE中返回InitReading()指针,但在调用后input似乎保持不变InitReading()。我已经通过将InitReading()void更改为FILE *类型来解决此问题,但我无法解决,为什么地球上没有更新指针。
非常感谢。

1 个答案:

答案 0 :(得分:0)

在C中,函数参数是通过值传递 anf对被调用者中的参数的修改不会影响调用者的局部变量。

您可以使用指向局部变量的指针让被调用者修改它们。

#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
    }
}