好的,所以我有这段代码,它可以从文件中提取各种内容
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 检索新令牌时,它都会替换结构数组中的先前值。
我已经把它缩小到这个有问题的块:
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