c++ - Fstream 的 tellg/seekg 返回值高于预期

标签 c++

为什么会失败,它应该很简单并且可以工作?

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/

相关文章:

c++ - "Magick++::readImages"当我调用它来解码 Blob 对象中的 png 图像时抛出警告

c++ - 跟踪专用模板对象的枚举成员值

c++ - 在 while 循环中将线程置于另一个线程中

c++ - 如何生成不同对的不等数?

c++ - 使用 Visual Studio 2008(无 SP1)设计选项卡控件

c++ - Visual Studio : Variable is being used without being initialized

c++ - CUDA 中数组行的最小值

c++ - 在 C++ 中组合两个 lambda

c++ - 一行输入。整数而不是整数

c++ - STL 库 :I am new to STL library and facing compilation error