我正在使用FILE * F在_sfopen()中打开我正在读取文件的同时(!feof(f))然后fgets(str,1024,f)在运行时到达最后一行它仍然会去在那段时间,但是当我试图fgets它飞出一个访问违规恐怖(男人,我只是尝试并抓住(...)但我知道这不是一个好的解决方案)我应该改变什么来解决问题?< / p>
另外 - 如果我想逐行阅读是正确的只是给出1024的大小或它可能会失败 - 我有一个文件,由于它每次从一行中间读取的大小,直到下一行的中间 - 是否有更好的方法来读取一行,因为我不知道我的文件会是什么样子(如果最后有\ n等等......)
谢谢!
答案 0 :(得分:3)
如果您未在while(!feof(f))
之前阅读,那么它就会被破坏,因为EOF标志在 之后才会被设置。而是做这样的事情:
char buf[1024];
while(fgets(buf, sizeof(buf), f)) {
/* process the line */
}
由于fgets被定义为在读取失败或EOF时返回NULL。
如果你在c ++中这样做,那么我推荐一个类似的模式(但是使用c ++ iostreams)。
std::ifstream file("filename.txt");
std::string line;
while(std::getline(file, line)) {
// process the line
}
答案 1 :(得分:0)