gpt4 book ai didi

C++ 流得到 unget 不是 nop?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:22 25 4
gpt4 key购买 nike

我有以下 C++ 程序并在 Windows 7 上使用 Visual Studio 2008 运行它。我获取然后取消获取一个字符。这样做之后,文件位置就不同了。为什么?我该如何解决这个问题?


test.txt(如果需要可以在下方下载)

/* Comment 1 */

/* Comment 2 */

#include <fstream>

int main (int argc, char ** argv) {
char const * file = "test.txt";
std::fstream fs(file, std::ios::in);
std::streampos const before = fs.tellg();

// replacing the following two lines with
// char c = fs.peek(); results in the same problem
char const c = fs.get();
fs.unget();

std::streampos const after = fs.tellg();
fs.seekg(after);
char const c2 = fs.get();
fs.close();
return 0;
}

  • c: 47 '/' char
  • c2: -1 'ÿ' char
  • before: {_Myoff=0 _Fpos=0 _Mystate=0 } std::fpos<int>
  • after: {_Myoff=0 _Fpos=-3 _Mystate=0 } std::fpos<int>

添加| std::fstream::binary到构造函数似乎解决了这个问题。也许它与文件中的换行符有关?如果是这样,为什么它会影响甚至无法读取换行符的代码?

更新为寻找后面的位置并获得另一个角色。

似乎通过记事本与 Vim 保存有所不同。通过记事本保存可以使流正常工作。

如果你想dl,我已经把文件上传到google docs了:

https://docs.google.com/leaf?id=0B8Ufd7Rk6dvHZmYyZjgwYmItMTI3MC00MDljLWJjYTctMWMxYWM0ODk1MTE2&hl=en_US

最佳答案

好的,使用您的输入文件,我看到了与您相同的行为。经过一些实验,该文件看起来像是 Unix 格式,然后编辑掉了 ^M 字符(至少我是这样重现它的)。

为了修复它,我在 Vim 中编辑文件,执行“:set ff=dos”,然后添加和删除一个字符来弄脏文件,然后保存它。

关于C++ 流得到 unget 不是 nop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com