为什么这会失败,它应该很简单并且有效?

fisier.seekg(0, ios::end);
long lungime = fisier.tellg();

这将返回一个比文件更大的值,导致错误
char *continut = new char[lungime];

知道可能是什么问题吗?

我还尝试一次计数到文件末尾一个字符,结果相同,比预期的要多。但是在使用 getline() 一次读取一行时,它可以工作,没有多余的空格...

最佳答案

猜测是,您正在以翻译模式打开文件,可能是在 Windows 下。当您只是寻找文件末尾时,当前位置不会考虑行尾翻译。一行的结尾(在外部文件中)标有“\r\n”对——但是当你读入它时,它被转换成一个“\n”。当您使用 getline 一次读取一行时, \n s 也会被丢弃,因此即使在不进行从外部到内部表示的转换的系统(例如 Unix/Linux)上,您仍然可以期望它们给出不同的尺寸。

再说一次,你真的应该忘记 new [] 的存在。如果要将整个文件读入字符串,请尝试以下操作:

std::stringstream continut;
continut << fisier.rdbuf();
continut.str() 是包含文件数据的 std::string

关于c++ - Fstream 的 tellg/seekg 返回的值(value)高于预期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2641639/

10-13 05:02