C文件输入fscanf问题(崩溃)
正如标题所说,当调用beolvas()时,我当然会崩溃。你可能明白我想做的,这也很简单。我正在使用mingw32 btw。提前感谢您的帮助C文件输入fscanf问题(崩溃),c,file,input,C,File,Input,正如标题所说,当调用beolvas()时,我当然会崩溃。你可能明白我想做的,这也很简单。我正在使用mingw32 btw。提前感谢您的帮助 typedef struct { int kerSzam; int voteCount; char *lastName; char *firstName; char *party; } Vote; void beolvas(Vote t[], int *n) { FILE *in; in = fope
typedef struct
{
int kerSzam;
int voteCount;
char *lastName;
char *firstName;
char *party;
} Vote;
void beolvas(Vote t[], int *n)
{
FILE *in;
in = fopen("szavazatok.txt", "r");
while(!feof(in))
{
fscanf(in,
"%d %d %s %s %s\n",
&t[*n].kerSzam,
&t[*n].voteCount,
t[*n].lastName,
t[*n].firstName,
t[*n].party
);
(*n)++;
}
fclose(in);
}
szavazatok.txt如下所示:
2 53 first last zed
1 5 first last pet
...
正如@Jean-Baptiste Yunès所评论的,需要为字符串分配内存 建议测试
fscanf()
的结果
您必须为结构的char*成员分配一些内存…需要进一步的帮助吗?
void beolvas(Vote t[], int *n, int maxn) {
FILE *in;
in = fopen("szavazatok.txt", "r");
if (in) {
char lastName[50];
char firstName[50];
char party[50];
int cnt = 0;
// spaces not needed in format, but widths are very useful
while(*n < maxn && (cnt = fscanf(in, "%d%d%49s%49s%49s",
&t[*n].kerSzam, &t[*n].voteCount, lastName, firstName, party)) == 5) {
t[*n].lastName = strdup(lastName);
t[*n].firstName = strdup(firstName);
t[*n].party = strdup(party);
(*n)++;
}
fclose(in);
}
}
char *strdup(const char *src) {
if (src) {
size_t size = strlen(src) + 1;
char *p = malloc(size);
if (p) {
return memcpy(p, src, size);
}
}
return 0;
}