gpt4 book ai didi

c - 函数中的 FILE 指针未更新

转载 作者:行者123 更新时间:2023-11-30 19:39:18 24 4
gpt4 key购买 nike

可能是一个非常简单的答案,但我现在还看不出来。两个函数:

#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() 修复了它来自voidFILE *输入,但我无法弄清楚,为什么指针没有更新。
非常感谢。

最佳答案

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

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

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

关于c - 函数中的 FILE 指针未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36682718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com