Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DeMoNcRaZy en 15 Mayo 2015, 17:06 pm



Título: [C++] Renombrar char [SOLUCIONADO]
Publicado por: DeMoNcRaZy en 15 Mayo 2015, 17:06 pm
Buenas,

Tengo un problema al renombrar una variable char, acá el código:

Código
  1. string buscarNombre;
  2.  
  3. cout << "Introduce el nombre a buscar: ";
  4. cin >> buscarNombre;
  5.  
  6. char *datname = "archivos/vid.txt";
  7.  
  8. *datname = buscarNombre;
  9.  
  10. ifstream fe(datname);


Y esta es la línea que me salta error:

Código
  1. *datname = buscarNombre;

He probado de varias maneras ya, pero no me deja renombrar a la variable o si no me salta error en el ifstream.

Si pueden echarme una mano lo agradecería.

Saludos.


Título: Re: [C++] Renombrar char
Publicado por: x64core en 15 Mayo 2015, 18:51 pm
"buscarNombre" es un objeto y "datname" es un puntero a caracter/cadena, datname  apunta a una cadena constante y no debe ser modificada, mejor crea un buffer en el que puedas escribir, para leer la cadena del objeto podes hacer:

char var_char;
var_char = buscarNombre.c_str()[ x ];



Título: Re: [C++] Renombrar char
Publicado por: Stakewinner00 en 15 Mayo 2015, 19:04 pm
esa línea tendría que ser
Código
  1. datname = buscarNombre.c_str();
para poder funcionar

el operador c_str() de la clase std::string devuelve un "const char*"

se debería modificar el tipo de datname también, a const char*

Código
  1.  #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.   string buscarNombre;
  9.  
  10.    cout << "Introduce el nombre a buscar: ";
  11.    cin >> buscarNombre;
  12.  
  13.    const char *datname = "archivos/vid.txt";
  14.  
  15.    datname = buscarNombre.c_str();
  16. }  


Título: Re: [C++] Renombrar char
Publicado por: DeMoNcRaZy en 15 Mayo 2015, 21:13 pm
Gracias,

Ahora me gustaría saber como sobre-escribir la constante.

Tengo esto:

Código
  1. datname = "archivos/" + buscarNombre.c_str();

Pero me salta error, no me deja ejecutarlo.


Título: Re: [C++] Renombrar char
Publicado por: Stakewinner00 en 15 Mayo 2015, 21:34 pm
puedes hacer
Código:
buscarNombre = "archivos/" + buscarNombre;
datname = buscarNombre.c_str();


un char* es un array de chars, el cual no tiene definido el operador de suma "+", por eso da error.


Título: Re: [C++] Renombrar char
Publicado por: DeMoNcRaZy en 15 Mayo 2015, 21:58 pm
puedes hacer
Código:
buscarNombre = "archivos/" + buscarNombre;
datname = buscarNombre.c_str();


un char* es un array de chars, el cual no tiene definido el operador de suma "+", por eso da error.


Gracias,

Ahora tengo una duda con verificar si el archivo existe o no, estoy probando con esto:

Código
  1. ifstream fe(datname);
  2. if(fe.good()){
  3. // Se muestra el contenido
  4. }
  5. else{
  6. cout << "El archivo no ha sido encontrado." << endl;
  7. }

Pero no da ningún resultado, y si lo modifico de distintas formas me salta el error.

A poder ser me gustaría que me explicaras por encima como funciona el código que me escribiste ayer al ayudarme:

Código
  1. ifstream fe(datname);
  2.    while(!fe.eof())
  3.    {
  4.        char c = fe.get();
  5.        str += c;
  6.  
  7. if(c == '\n') {
  8.            cout << str;
  9.            str = "";
  10.        }
  11.    }

Saludos.


Título: Re: [C++] Renombrar char
Publicado por: Stakewinner00 en 15 Mayo 2015, 22:17 pm
Muchas de esas dudas sobre mimebros de algunos objetos lo puedes encontrar en http://en.cppreference.com/w/ la primera duda acerca de si el fichero esta abierto se puede encontrar buscando en esa web.

Si la duda que tienes es que hace fe.get(), eso lo puedes encontrar en ese link también.


Título: Re: [C++] Renombrar char
Publicado por: DeMoNcRaZy en 15 Mayo 2015, 22:25 pm
Gracias por la ayuda.

Solucionado.