void read_names(ex6 **first)
{
FILE *fltext;
ex6 *next;
char aux[50];
next = malloc(sizeof(ex6));
if (!next)
return;
(*first) = next;
fltext = fopen(nome_fich_6a, "rt");
if (!fltext)
return;
while (!feof(fltext)) {
fscanf(fltext, "%[^\n]s\n", aux);
next->name = malloc(sizeof(char)*strlen(aux));
if (!prox->name)
return;
strcpy(next->name, aux);
while (next->prox != NULL)
next = next->prox;
}
fclose(fltext);
}
所以我正在做这个练习,当我尝试读取保存在文本文件中的字符串的内容时,它只返回到菜单,并且不会将任何内容读入next-> name参数。如果有人可以帮助我解决这个错误,我会真的很赞成它。
所以这是我对代码所做的更改
void read_names(ex6 **first)
{
FILE *fltext;
ex6 *next;
char aux[50];
next = malloc(sizeof(ex6));
if (!next)
return;
(*first) = next;
fltext = fopen(nome_fich_6a, "rt");
if (!fltext)
return;
while (fgets(aux, 50, fltext)) {
next->name = malloc(sizeof(char)*strlen(aux));
if (!prox->name)
return;
sscanf(aux, "%[^\n]s", next->name);
strcpy(next->name, aux);
while (next->prox != NULL)
next = next->prox;
}
fclose(fltext);
}
答案 0 :(得分:0)
看看旁边:malloc(sizeof(char)*strlen(aux));
你正在分配没有'\ 0'的sizof字符串,所以你应该再分配1个例如malloc(sizeof(char)*strlen(aux) + 1);
。当您复制aux
时,您正在写下未分配的下一段内存。接下来,节点之间没有链接。这就是为什么
while (next->prox != NULL)
next = next->prox;
失败。尝试在while循环内部建立一个链接,这应该可行。我希望您将name
变量设为char *
在while循环中,你缺少')'。