Pasar contenido de fichero .txt a array de caracteres en c++

publicado por: Anonymous

Tengo que pasar un archivo de texto a un array de caracteres.
He hecho la siguiente función:

char* loadData(string fileName, int& longitud)
{
    char* arrayTemp = NULL;
    ifstream file;
    file.open(fileName);
    if(file.fail())
    {
        perror(fileName.c_str());
        system("pause");
        exit(1);
    }

    string line;
    string line2;
    while(getline(file, line))
    {       
        line2 += line;
    }
    longitud = line2.size() + 1;
    arrayTemp = new char[longitud];
    for(int i = 0; i <longitud; i++)
    {
        arrayTemp[i] = line2[i];
    }
    file.close();

    return arrayTemp;
}

Pero algo falla porque al imprimir el array resultante de, por ejemplo, cargar un archivo que contenga lo siguiente :

1.- Alberto XXX 
2.- Ana     XXX
3.- Emilio  XXX
4.- Ignacio XXX

el resultado es

1.- Alberto XXX 2.- Ana     XXX3.- Emilio  XXX4.- Ignacio XXX

es decir no hay salto de línea.

La función Main queda así :

int main(){
    int longitud = 0;
    char* arrayTemp = loadData("Level1.txt", longitud);

    for(int i = 0; i < longitud; i++)
    {
        cout << arrayTemp[i];
        if(arrayTemp[i] == '')
        {
            cout << endl;
        }
    }

    delete[] arrayTemp;
    return 0;
}

Como siempre le doy mil gracias de antemano a quién le pueda echar un vistazo :).

solución

getline( ) no coloca el 'n' en la cadena que extrae; dicho caracter se pierde por el camino.

Lo mas fácil es que lo coloques tu:

while(getline(file, line))
{
  line2 += 'n';
  line2 += line;
}

Haciendo eso, puedes simplificar tu main( ):

int main( ) {
  int longitud = 0;
  char* arrayTemp = loadData( "Level1.txt", longitud );

  cout << arrayTemp << endl;

  delete[] arrayTemp;
  return 0;
}

Ya que estamos, puedes usar la función strncpy( ) para copiar la cadena, ahorrándote un bucle:

#include <cstring>

char* loadData( string fileName, int &longitud ) {
  ...
  longitud = line2.size( ) + 1;
  arrayTemp = new char[longitud];

  strncpy( arrayTemp, line2.c_str( ), longitud );

  file.close( );

  return arrayTemp;
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *