繁体   English   中英

使用fgets和strtok在C中读取文件?

[英]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字符。 \\natoi忽略。 如果要将其从返回的标记中剥离,请用" \\n"替换strtok的最后一个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM