循环使用结构(在C中)

时间:2018-10-05 06:39:15

标签: c struct

我试图先将数据插入到Data结构中,然后将其解析为一个insertFirst函数,该函数可以将其放入我的链接列表中。这些都是在while循环中完成的。

while(fgets(line, 8, file) != NULL)
{
    x= (Data*)malloc(sizeof(Data)); 
    sscanf(line, "%s %s", line, val);

    x->c = line; 
    x->v =val; 

    insertFirst(list, x);
}

但是我试图重用Data结构。每次都分配它。我的问题是,尽管正确读取了行。 例如LOREM 1IPSUM 3,链接列表将始终包含IPSUM 3。如何在循环中重复使用这样的结构?

2 个答案:

答案 0 :(得分:4)

这里的问题是您要分配cmdval作为指向x->commandx->value的指针,因此x->commandx->value将始终指向cmdval中的更新值。

因此,您可以如下更改代码。

while(fgets(line, 15, inputFile) != NULL)
{
    x= malloc(sizeof(Data)); 
    sscanf(line, "%s %s", cmd, val);

    x->command = strdup(cmd); 
    x->value = strdup(val); 

    insertFirst(list, x);
}

strdup在其中计算所需的空间并动态分配内存,并复制输入字符串并返回新分配的指针。

答案 1 :(得分:0)

另一种可能性是

typedef struct Data
{
    char command[100]; 
    char value[100]; 
} Data; 

while(fgets(line, 15, inputFile) != NULL)
{
    x= (Data*)malloc(sizeof(Data)); 
    sscanf(line, "%s %s", x->command, x->value);  

    insertFirst(list, x);
}

免责声明:为简洁起见,此处未对字符串进行错误检查或边界检查。