不将字符串从文件复制到链接列表参数

时间:2016-06-19 21:17:37

标签: c

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);
}

1 个答案:

答案 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循环中,你缺少')'。