<分区>
好的,我有这段代码,它可以从文件中提取各种内容
while(fgets(buffer, sizeof(buffer), fp) !=NULL)
{
name = strtok(buffer,del);
class=strtok(NULL,del);
grade = atoi(strtok(NULL,del));
d[counter].name=name;
d[counter].course=class;
d[counter].grade=grade;
printf("%s %s %d\n",d[counter].name,d[counter].course,d[counter].grade);
counter++;
}
现在的问题是,每次从 strtok 检索到新标记时,它都会替换结构数组中的先前值。
我已经缩小到这个 block 有问题:
d[counter].name=name;
d[counter].course=class;
它似乎指向同一个内存块,每次 strtok 返回一个新值时都会重新写入该内存块,因此我在结构中的所有指针都指向该 1 个对象。
这是我的结构:
struct student {
char *name;
char *course;
int grade;
};
现在我的问题是,无论如何都可以将 strtok 值放入单独的内存地址,这样它们就不会全部指向 1 个位置并替换它们自己吗?
Strdup、malloc 和 memmove 不适合我。
为了更清楚地表示正在发生的事情,这里是粗略的预期输出
Tom Phys 1444 54
Joe CSE 1310 95
Alex Chem 2315 86
Tim Span 1443 81
现在这是我得到的输出
Tim Span 1443 54
Tim Span 1443 95
Tim Span 1443 86
Tim Span 1443 81