[英]Using fgets and strtok to read a file in C?
我目前正在为学校编写一个小程序,我们必须使用fgets和strtok来读取文件。
input.txt is:
Redden 2 0
Berglund 5 2
Jackman 2 0
Stewart 4 0
Oshie 3 5
McDonald 2 4
这是相关的代码
int main(int arg, char *argv[]) {
FILE *fp=fopen(argv[1]);
char **names=NULL;
int *goals=NULL;
int *assists=NULL;
int size = countLinesInFile(fp);
allocateMemory(&goals, &assists, &names, size);
readLines(fp, goals, assists, names, size);
}
void allocateMemory(int** goals, int** assists, char*** names, int size) {
*goals = malloc(size*sizeof(int));
*assists = malloc(size*sizeof(int));
*names = malloc(size*sizeof(char *));
int i;
for(i=0; i<size; i++)
{
*(*names + i) = malloc(MAX_NAME*sizeof(char));
}
}
void readLines(FILE *ptr, int *goals, int *assists, char **names, int size) {
char *line=malloc(MAX_LINE*sizeof(char));
int i;
char *token=NULL;
for(i=0;i<size;i++) {
if(fgets(line,MAX_LINE, ptr)!=NULL); {
token=strtok(line,"");//segfaulting somewhere around these lines
strcpy(names[i],token);
token=strtok(NULL,"\n");
goals[i]=atoi(token);
token=strtok(NULL,"\n");
assists[i]=atoi(token);
}
}
free(line);
}
所以我正在断断续续,它告诉我它发生在readLines函数中,并且不知道如何解决此问题。 任何帮助表示赞赏。 谢谢!
问题之一是调用strtok
。 您的文件使用空格作为定界符,因此您应该执行以下操作:
if(fgets(line,MAX_LINE, ptr)!=NULL); {
token=strtok(line," ");
strcpy(names[i],token);
token=strtok(NULL," ");
goals[i]=atoi(token);
token=strtok(NULL," ");
assists[i]=atoi(token);
}
请注意,第三个标记将包含\\n
字符。 \\n
被atoi
忽略。 如果要将其从返回的标记中剥离,请用" \\n"
替换strtok
的最后一个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.