Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: skan en 13 Agosto 2013, 15:59 pm



Título: Duda c_str() en ejemplo libro Prata
Publicado por: skan en 13 Agosto 2013, 15:59 pm
Hola

Estaba leyendome el libro C++ Primer Plus 6th de Prata para refrescar un poco mi C++ y tengo una duda sobre un ejemplo sobre I/O de archivos.
En la página 1117 hay un ejemplo en el que entre otras cosas escriben esto:

Código:
string filename;
cout << "Enter filename";
cin >> filename;
ofstream fout(filename.c_str());
y dice que se usa c_str() para pasar el nombre, que es un string, como parámetro...


En la página 1121 en otro ejemplo se usa

Código:
fin.open(argv[number]);   

¿Por qué no se usa también el  .c_str() en este caso?

saludos


Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: avesudra en 13 Agosto 2013, 16:02 pm
Hola skan en ese caso no utiliza .c_str()  porque le pasa como argumento el parámetro o los parámetros que se le pasan al programa por consola.


Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: skan en 13 Agosto 2013, 16:06 pm
Hola
Sí, pero ese argv[numero] es como un puntero a un  "string", ¿no?


Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: avesudra en 13 Agosto 2013, 16:11 pm
A un string no, es un puntero a un char vamos lo que retorna contiene es (char*) la dirección de una cadena, que será el parámetro ubicado en la posición numero.




Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: amchacon en 13 Agosto 2013, 16:17 pm
.c_str() es una funcion de la clase string para convertir los strings a cadenas char* clasicas.

El ARGV es una cadena char* clasica, lo mismo que poner el nombre entre comillas:
Código
  1. ofstream fout("Un archivo.txt");


Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: skan en 13 Agosto 2013, 21:51 pm
Es que me extraña que de el mismo modo no se pueda escribir
Código:
string filename;
cout << "Enter filename";
cin >> filename;
ofstream fout(filename);

sin usar el c_str(), simplemente cogiendo el string como input.


Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: amchacon en 13 Agosto 2013, 21:55 pm
Explico mejor.

Una cadena char*, no son mas que los caracteres puestos en fila. Ahí no hay problema alguno.

Un string, es un contenedor/objeto para facilitar el trabajo con cadenas de caracteres. Este objeto tiene sus datos, sus funciones y sus operaciones... No es una cadena de caracteres propiamente dicha.

Su funcion .c_str() obtiene del string un texto leible y entendible.


Título: Re: Duda c_str() en ejemplo libro Prata
Publicado por: 0xDani en 14 Agosto 2013, 18:14 pm
Lo normal para funciones de la librería estándar que requieran una cadena de caracteres es que acepten un objeto de la clase string, sin embargo los constructores de las clases para I/O no lo han hecho hasta el más reciente estándar de C++, el 11.