可能是一个非常简单的答案,但我现在还不能真正看到它。两个功能:
#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 *
类型来解决此问题,但我无法解决,为什么地球上没有更新指针。
非常感谢。
答案 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
}
}