gpt4 book ai didi

c - 结构体值在传回 main 时不保留

转载 作者:行者123 更新时间:2023-11-30 14:42:41 25 4
gpt4 key购买 nike

作为前言,我是编码新手,因此,如果我遗漏了一个完全明显的问题,我提前道歉。

我正在编写一些代码,将各种名称和数字从文件读取到如下所示的结构中。

typedef struct KnightsBallLottoPlayer {
char firstName[20];
char lastName[20];
int numbers[6];
} KBLottoPlayer;

我将文件本身的扫描放入其自己的 void 函数中,就像这样,使用指针 KBLottoPlayer * player;主要:

void scanning(KBLottoPlayer*players){
int i, j;

FILE * ifp = NULL;
ifp=fopen("KnightsBall.in", "r");

fscanf(ifp, "%d", &people);
players = malloc(people * sizeof(KBLottoPlayer));

for(i=0;i<people;i++){
fscanf(ifp, "%s%s", &players[i].lastName, &players[i].firstName);

for(j=0;j<6;j++){
fscanf(ifp, "%d", &players[i].numbers[j]);
}
}
}

到目前为止一切顺利,我在函数中立即打印出所有这些值,它们都排列得很好。没有问题。他们打印准确的值和名称。我返回到 main,并在执行其他操作之前再次将它们打印出来,突然我得到了名称和值的随机 ASCII 字符,例如数字的 -32342342。

如果需要,我会粘贴更多信息,但是有人知道这是怎么回事吗?我将在这里冒险并假设我应该返回一些东西并使用传值函数,但我不完全确定如何从这里继续。预先感谢您的帮助和客气话。

最佳答案

您正在按值传递,并且需要按引用传递。如果您通过引用传递指针,它将起作用。试试这个:

void scanning(KBLottoPlayer** players){
int i, j;

FILE * ifp = NULL;
ifp=fopen("KnightsBall.in", "r");

fscanf(ifp, "%d", &people);
*players = malloc(people * sizeof(KBLottoPlayer));

for(i=0;i<people;i++){
fscanf(ifp, "%s%s", &(*players)[i].lastName, &(*players)[i].firstName);

for(j=0;j<6;j++){
fscanf(ifp, "%d", &(*players)[i].numbers[j]);
}
}
}

然后当你调用scanning时,传入变量的地址,如下所示:

 scanning(&players);

它基本上将一个指针传递给另一个指针,以便您可以在其他函数中修改它。

更多信息:

关于c - 结构体值在传回 main 时不保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357962/

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