gpt4 book ai didi

c++ - seekg 不工作

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:00 25 4
gpt4 key购买 nike

我正在使用 Visual C++ 2010 开发 MFC 应用程序

我正在读取一个文件的数据,但似乎 seekg 不工作

这是我的代码

//Transaction is a class i have defined before

void displayMessage(CString message)
{
MessageBox(NULL,message,L"error",MB_OK | MB_ICONERROR);
}

///////////////////////////////
ifstream input;

input.open("test.dat" , ios::binary );
if( input.fail() )
{
CString mess;
mess = strerror( errno );
mess.Insert(0,L"Error\n");
displayMessage(mess);
}

Transaction myTr(0,myDate,L"",0,0,L""); // creating an object of transaction
unsigned long position = 0;
while(input.read( (char *) &myTr , sizeof(Transaction)))
{
if(myTr.getType() == 400 )
position = (unsigned long)input.tellg() - sizeof(Transaction);
}


CString m;
m.Format(L"Pos : %d",position);
displayMessage(m);

input.clear();//I also tried removing this line
input.seekg(position,ios::beg );

m.Format(L"get pos: %d",input.tellg());
displayMessage(m);
input.close();

第一个 displayMessage 显示:Pos : 6716 但第二个显示:get pos: 0

为什么 seekg 不起作用?

谢谢

最佳答案

问题是 CString.Format() 是一个可变参数函数,而 basic_istream::tellg() 返回一个 pos_type,它不是t 可以作为可变参数参数传递的类型,因此您会得到未定义的行为。

如果你想将你从 tellg() 得到的位置传递给 CString::Format() 你需要转换它或把它放在一个临时的中间变量:

    unsigned long new_pos = input.tellg();
m.Format(L"get pos: %d", new_pos);

关于c++ - seekg 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539760/

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