Hola, estoy intentando leer una especie de mapa de un archivo a un array, pero tengo unas dudas.
Lo estoy haciendo de esta forma:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
const int x = 17;
const int y = 12;
char Map[y][x];
ifstream MapF("Levels/Level00.txt");
if (!MapF)
{
cerr << "Error..." << endl;
exit(1);
}
int count = 0;
// Leer...
while (!MapF.eof())
{
MapF.getline( (char*) Map + count, x);
if (*((char*) Map + count) != '#')
count += x;
}
MapF.close();
// Imprimir...
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
cout << Map[i][j];
}
cout << endl;
}
return 0;
}
Los archivos que voy a leer son de este tipo:
#Comentario
#Si me paso de
#16 caracteres
#por línea, o
#dejo una linea
#al final sale
#error.
rrrrrrrrrrrrrrrr
r r r r
r r r r r
r fr r
r r r
r r r
r r r rr
r r r r
rt r
r r r r r
r r r
rrrrrrrrrrrrrrrr
Si dejo una línea en blanco al final me sale este error: "Run-Time Check Failure #2 - Stack around the variable 'Map' was corrupted".
Y si me paso de 16 caracteres sale este; "Excepción no controlada en 0x67b00866 en Map.exe: 0xC0000005: Infracción de acceso al escribir en la ubicación 0x00250007".
Si cambio el valor de
x a 16 (sólo me interesa las 16 primeras columnas) me sale este error "Excepción no controlada en 0x7770159e en Map.exe: 0xC0000005: Access violation".
Supongo que el caracter 17 es el salto de línea o fin de línea, y por eso si aumento uno serían 18 y violaría la memoria o algo así.
Bueno, quisiera saber como puedo hacer para poder tener sólo el array de 12*16, y como puedo mejorar la forma de obtenerlo, sin tener problemas por líneas de mayores de 16 caracteres o líneas en blanco al final.
Estoy usando MS Visual C++ 2008 Express Edition.
Gracias y feliz año nuevo.