为什么会失败,它应该很简单并且可以工作?
fisier.seekg(0, ios::end);
long lungime = fisier.tellg();
这会返回一个比文件大的值导致错误
char *continut = new char[lungime];
知道问题出在哪里吗?
我还尝试一次一个字符地计数到文件末尾,结果相同,比预期的数字多。但是在使用 getline() 一次读取一行时,它起作用了,没有多余的空格......
最佳答案
据推测,您可能在 Windows 下以翻译模式打开文件。当您简单地查找文件末尾时,当前位置不会考虑行尾翻译。一行的结尾(在外部文件中)标有“\r\n”对——但当您读入它时,它会被转换为一个“\n”。当您使用 getline
一次读取一行时,\n
也会被丢弃,所以即使在不这样做的系统(例如 Unix/Linux)上从外部表示到内部表示的转换,您仍然可以期望它们给出不同的尺寸。
话又说回来,你真的应该完全忘记 new []
的存在。如果你想将整个文件读入一个字符串,尝试这样的事情:
std::stringstream continut;
continut << fisier.rdbuf();
continut.str()
是一个包含文件数据的 std::string
。
关于c++ - Fstream 的 tellg/seekg 返回值高于预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2641639/