使用strtok处理C中的文本在EOF遇到错误

时间:2015-02-03 12:56:36

标签: c

我尝试使用C处理文本文件,读取每一行并将其拆分为分隔符" \ t"。代码可以工作但在文件末尾输出一行:

测试文件是:

0 zero
0 one
0 two

代码:

void ReadClass(){
    char line[1000];
    char *ptr;
    int class;
    char word[1000];
    FILE *fin;
    fin = fopen("class_file", "rb");
    if (fin == NULL){
        printf("ERROR, class fine not found!");
        exit(1);
    }
    while (1){
            fgets(line, sizeof(line), fin);
            ptr = strtok(line, "\t");
            class = atoi(ptr);
            printf("%i ", class);
            ptr = strtok(NULL, "\t");
            //strcpy(word, ptr)   //This gives segmentation fault because of the null pointer in the end
            printf("%s", ptr);
            if (feof(fin)) break;
    }
    fclose(fin);
}

输出结果为:

0 zero
0 one
0 two
0 (null)

感谢任何帮助过的人。

1 个答案:

答案 0 :(得分:3)

在您尝试从文件末尾读取之前,EOF标志不会设置,这意味着您的fgets调用将读取三行,然后在第四次阅读后,EOF标志将被设置,fgets将返回NULL

所以不要在你所做的位置检查EOF,而是在循环条件下进行:

while (fgets(...) = NULL) { ... }