Pergunta

Eu estou fazendo um jogo e eu tenha armazenado os dados do mapa em uma matriz 2-dimensional de tamanho [34] [10]. Originalmente eu gerado o mapa usando uma função simples para encher a matriz e salvou esses dados para um arquivo usando o seguinte código:

ofstream myFile;
myFile.open("map.txt");

for ( int y = 0 ; y < MAP_HEIGHT ; ++y )
{
    for ( int x = 0 ; x < MAP_WIDTH ; ++x )
    {
        myFile << m_acMapData[x][y];
    }
    myFile << '\n';
}

myFile.close();

Isso gera um arquivo de texto que é algo como a forma como eu quero que ele. No entanto, quando eu tento lê-lo novamente usando o seguinte código, recebo um monte de violações de acesso e deixa de funcionar em tempo de execução:

ifstream myFile;
int i=0;
int j=0;
char line[MAP_WIDTH];

myFile.open("map.txt");
while (!myFile.eof())
{
    myFile.getline(line, MAP_WIDTH);
    for ( i=0; i<MAP_WIDTH; i++ )
    {
        m_acMapData[i][j] = line[i];
    }
    ++j;
    cout << line;
}

Alguém sabe qual é o problema?

Foi útil?

Solução

while (!myFile.eof())
{
        myFile.getline(line, MAP_WIDTH);

deve ser:

while ( myFile.getline(line, MAP_WIDTH) )
{

No entanto, seria mais seguro para ler em uma std :: string:

string line:
while ( getline( myFile, line ) )
{

Você também pode querer ler o meu blog sobre este assunto, em http://punchlet.wordpress.com .

Outras dicas

Ya eu definitivamente falhar porque você está fazendo de errado aqui.

ofstream myFile;
myFile.open("map.txt");

for ( int y = 0 ; y < MAP_HEIGHT ; ++y ) 
{
    for ( int x = 0 ; x < MAP_WIDTH ; ++x )
    {
            myFile << m_acMapData[x][y];
    }
    myFile << '\n';
}
myFile.close();

MAP_HEIGHT = 3 Suponha e MAP_WIDTH = 6 ;

E você deve saber que matriz em C / C ++ é fileira grande assim quando você tentar acessar

m_acMapData [4] [0] seria acesso à memória fora de seu alcance.

Então, fazer algo como isto:

for ( int y = 0 ; y < MAP_HEIGHT ; ++y ) 
{
    for ( int x = 0 ; x < MAP_WIDTH ; ++x )
    {
            myFile << m_acMapData[y][x]; // here to be changed
    }

    myFile << '\n';
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top