Duda c_str() en ejemplo libro Prata

Iniciado por skan, 13 Agosto 2013, 15:59 PM

0 Miembros y 1 Visitante están viendo este tema.

skan

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:

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

fin.open(argv[number]);   

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

saludos

avesudra

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.
Regístrate en

skan

Hola
Sí, pero ese argv[numero] es como un puntero a un  "string", ¿no?

avesudra

#3
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.


Regístrate en

amchacon

.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 (cpp) [Seleccionar]
ofstream fout("Un archivo.txt");
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

skan

Es que me extraña que de el mismo modo no se pueda escribir

string filename;
cout << "Enter filename";
cin >> filename;
ofstream fout(filename);


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

amchacon

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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM