gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:09 24 4
gpt4 key购买 nike

我尝试用 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)

感谢所有提供帮助的人。

最佳答案

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

因此,与其在您执行的位置检查 EOF,不如在循环条件中执行:

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

关于c - 使用 strtok 在 C 中处理文本在 EOF 处遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28299498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com