我试图先将数据插入到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 1
和IPSUM 3
,链接列表将始终包含IPSUM 3
。如何在循环中重复使用这样的结构?
答案 0 :(得分:4)
这里的问题是您要分配cmd
和val
作为指向x->command
和x->value
的指针,因此x->command
和x->value
将始终指向cmd
和val
中的更新值。
因此,您可以如下更改代码。
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);
}
免责声明:为简洁起见,此处未对字符串进行错误检查或边界检查。