typedef struct rilevamenti {
char idStazione[4];
...
struct rilevamenti* next;
} rilevamenti_t;
void push (rilevamenti_t ** head, char id[], char nome[], char codice[], float quant, char data[]);
int main(int argc, char **argv)
{
FILE *fp;
char tmpIdStazione[4];
char tmpNomeParametro[200];
char tmpCodiceParametro[6];
float tmpQuantita;
char tmpData[8];
fp = fopen("file1.txt", "r");
if(fp == NULL)
{
perror("Error in opening file1.txt");
return(-1);
}
rilevamenti_t * lista1 = NULL;
while(1){
fscanf(fp, "%s", tmpIdStazione);
printf("Stazione: %s\n", tmpIdStazione );
...
push (lista1, tmpIdStazione, ...);
if( feof(fp) ) {
break ;
}
}
fclose(fp);
return 0;
}
void push(rilevamenti_t ** head, char id[], char nome[], char codice[], float quant, char data[])
{
rilevamenti_t * new_rilevamento;
new_rilevamento = (rilevamenti_t *)malloc(sizeof(rilevamenti_t));
strncpy(new_rilevamento->idStazione, id, 4);
...
*head = new_rilevamento;
}
我认为我在推动功能的调用中缺少一些东西, 我的idead是将列表的头指针作为指针传递, 所以我可以从列表的头部逐个添加所有列表结构,只需更改第一个指针。
但我很震惊,老实说,经过大量的java和C#后,我对C有点生疏了:/
我设置“...”只是为了让代码变短,在那里我列出了所有结构的成员并逐个填充它们。
答案 0 :(得分:0)
在这种情况下rilevamenti_t*
传递&lista1
的地址。它将是
push (&lista1, tmpIdStazione, ...);
在您出现类型不匹配之前。并且您传递了一个指针(rilevamenti_t *
),其中指向了双指针(rilevamenti_t**
)。这导致了未定义的行为。(您正在取消引用NULL
)。
不要转换malloc
的返回值并检查malloc
的返回值。 子>