C++ Seekp multiple times

C++ Seekp multiple times

本文关键字:times multiple Seekp C++      更新时间:2023-10-16

代码需要通过使用seekp转到特定的地址来在文件中写入一些值。但是当我启动它时,只有第一个数组被写入文件。新地址可以像新值一样从INI读取,但它不会写入文件中。它用于游戏保存文件。

法典:

const int noq = 5; 
const int noqd = 4; 
int questData[noqd] = {10, 10, 10, 10};
int adresslist[noqd] ={0x0,0x0,0x0, 0x0}; 
fstream aus("quest1", ios::binary | ios::out | ios::in);   
char buffer[512];
int i;
int j;
int Money, Prize, HRpoints, Map;    
int Mappointer, Moneypointer, PrizePointer, HRpointer;

for (j=0; j <= noq; j++)
{
    sprintf_s(buffer,"%d",j);
    Money = GetPrivateProfileInt(buffer,"RewardMoney", 0, ".\Settings.ini");
    Prize = GetPrivateProfileInt(buffer,"Questprize", 0 , ".\Settings.ini");
    HRpoints = GetPrivateProfileInt(buffer,"RewardHRpoints", 0 , ".\Settings.ini");
    Map = GetPrivateProfileInt(buffer,"Map", 1 , ".\Settings.ini");

    questData[0] = Money;
    questData[1] = HRpoints;
    questData[2] = Prize;
    questData[3] = Map;
    Moneypointer = GetPrivateProfileInt(buffer,"RewardMoney", 0, ".\Pointers.ini");
    PrizePointer = GetPrivateProfileInt(buffer,"Questprize", 0 , ".\Pointers.ini");
    HRpointer = GetPrivateProfileInt(buffer,"RewardHRpoints", 0 , ".\Pointers.ini");
    Mappointer = GetPrivateProfileInt(buffer,"Map", 1 , ".\Pointers.ini");
    adresslist[0] = Moneypointer;
    adresslist[1] = HRpointer;
    adresslist[2] = PrizePointer;
    adresslist[3] = Mappointer;

    for (i=0; i<=noqd; i++)
    {
        printf("n<Adress>n");
        aus.seekp(0x0);
        aus.seekp(adresslist[i], ios::beg);
        printf("n<Write>");
        aus.write(reinterpret_cast<char*>(&questData[i]), sizeof(questData[i])); 
        Beep(1000,100); 
    }

    i = 0;
}
aus.close();

}

您的for循环是错误的。

for (i=0; i<=noqd; i++)

这是 0,1,2,3,4。但您的数组只能从 0 到 3。