为什么我的程序在我的文件实际结束之前感知到 EOF 条件?
Why is my program perceiving an EOF condition way before my file actually ends?
我的代码从文本文件中逐行读取并将这些行存储在大量字符指针数组中。当我使用普通文本文件时,这没有问题。但是,当我尝试读取我应该使用的 'dictionary.txt' 文件时,我的程序在读取文件中许多行的第一行后检测到 EOF。
int i = 0;
while( 1 ) {
size_t size = 50;
fseek( dicFile, 0L, getline( &dictionary[i++], &size, dicFile) );
printf( "%d:\t%s", i, dictionary[i - 1] );
if( feof( dicFile ) ) {
fclose( dicFile );
break;
}
}
puts("finished loading dictionary");
这是我尝试加载的词典文件的开头:
A
A's
AA's
AB's
ABM's
AC's
ACTH's
AI's
AIDS's
AM's
AOL
AOL's
ASCII's
ASL's
ATM's
ATP's
AWOL's
AZ's
这部分程序的输出是:
1: A
2: finished loading dictionary
感谢您的帮助。
你对 fseek()
的第三个论点是胡说八道。我见过至少一个将每个超出范围的第三个参数视为 SEEK_END 的实现。哎呀
您应该只在循环中调用 getline()
。事实上,只需检查 getline()
的 return 值以获得 -1
并删除 feof()
。
我的代码从文本文件中逐行读取并将这些行存储在大量字符指针数组中。当我使用普通文本文件时,这没有问题。但是,当我尝试读取我应该使用的 'dictionary.txt' 文件时,我的程序在读取文件中许多行的第一行后检测到 EOF。
int i = 0;
while( 1 ) {
size_t size = 50;
fseek( dicFile, 0L, getline( &dictionary[i++], &size, dicFile) );
printf( "%d:\t%s", i, dictionary[i - 1] );
if( feof( dicFile ) ) {
fclose( dicFile );
break;
}
}
puts("finished loading dictionary");
这是我尝试加载的词典文件的开头:
A
A's
AA's
AB's
ABM's
AC's
ACTH's
AI's
AIDS's
AM's
AOL
AOL's
ASCII's
ASL's
ATM's
ATP's
AWOL's
AZ's
这部分程序的输出是:
1: A
2: finished loading dictionary
感谢您的帮助。
你对 fseek()
的第三个论点是胡说八道。我见过至少一个将每个超出范围的第三个参数视为 SEEK_END 的实现。哎呀
您应该只在循环中调用 getline()
。事实上,只需检查 getline()
的 return 值以获得 -1
并删除 feof()
。