Carregando texto de um arquivo em uma matriz 2-dimensional (C ++)
-
18-09-2019 - |
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?
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';
}