【发布时间】:2019-06-18 20:33:34
【问题描述】:
首先,我是编码新手,所以如果这里有一个我遗漏的完全明显的问题,我提前道歉。
我正在编写一些代码,将各种名称和数字从文件中读取到如下所示的结构中。
typedef struct KnightsBallLottoPlayer {
char firstName[20];
char lastName[20];
int numbers[6];
} KBLottoPlayer;
我像这样将文件本身的扫描放入它自己的void函数中,在main中使用指针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 表示数字。
如果需要,我会粘贴更多信息,但有人知道这是怎么回事吗?我将在这里冒险并假设我应该返回一些东西并改用按值传递函数,但我不完全确定如何从这里开始。提前感谢您的帮助和客气话。
【问题讨论】:
-
您传递了一个指针的副本。如果你通过 malloc 将该指针指向新的东西,那么你正在修改不同的内存。要么将指针传递给指针,要么在函数外部分配结构。考虑minimal reproducible example,您可能有更多我们看不到的问题。
-
这不是一个重复的问题。至少,它不是发布的那个的副本。
-
@DarrinCullop:在这个问题中,函数接收一个指针参数
players,分配空间,设置指针指向空间,然后返回,丢失指针。在提议的原版中,该函数接收一个指针参数s,分配空间,将指针设置为指向该空间,然后返回,丢失指针。您认为有什么显着差异? -
我想这没什么不同。