elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Opinión] Interesante manera de usar char* con cout
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Opinión] Interesante manera de usar char* con cout  (Leído 5,863 veces)
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
[Opinión] Interesante manera de usar char* con cout
« en: 23 Julio 2013, 13:35 pm »

Buenas!!

Pues justo hice una función como esta:
Código
  1. void something(char *text){
  2.    cout << *text;
  3. }
  4.  
Y sólo me imprimía text[0].
Suponí que podría ir aumentando el puntero hasta llegar a \0:
Código
  1. void something(char *text){
  2.    while(*text != '\0') cout << *text++;
  3.    // nota: si ponemos *text++ en el while()
  4.    // se salta el caracter 0
  5. }
  6.  
Efectivamente, funciona.

Pero luego pensé en otra manera (sin usar while), y me salió esto:
Código
  1. void something(char **text){
  2.    cout << *text;
  3. }
  4. char *str = "hello world";
  5. something(&str);
  6.  

¿Cuál creéis que es la mejor opción?
La primera, sin duda, es más simple, pero usa while.
La segunda, al ser un poco más complicada, quita legibilidad, pero parece funcionar más rápido.


En línea

I'll bring you death and pestilence, I'll bring you down on my own
Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #1 en: 23 Julio 2013, 13:43 pm »

Usa cout como siempre.

Imaginate ver 
Código
  1.  while(*text != '\0') cout << *text++;
2 años despues, pensarás que que carajo estás haciendo...


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #2 en: 23 Julio 2013, 13:44 pm »

Código
  1. void something(char **text){
  2.   cout << *text;
  3. }
  4. char *str = "hello world";
  5. something(&str);

Esto es lo mismo que poner:

Código
  1. char *str = "hello world";
  2. cout<<str;
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #3 en: 23 Julio 2013, 13:55 pm »

Usa cout como siempre.

Imaginate ver 
Código
  1.  while(*text != '\0') cout << *text++;
2 años despues, pensarás que que carajo estás haciendo...
Tienes razón  :laugh:
Código
  1. void something(char **text){
  2.   cout << *text;
  3. }
  4. char *str = "hello world";
  5. something(&str);

Esto es lo mismo que poner:

Código
  1. char *str = "hello world";
  2. cout<<str;
Lo sé, lo sé.
Mi función creaba una especie de "header" con un montón de opciones, parámetros, FAQ y demás (como quien hace command -h), así que necesitaba envolver eso en una función para no tener que escribirlo cada vez.
Y en ese texto grande tenía que insertar algunas variables.
En línea

I'll bring you death and pestilence, I'll bring you down on my own
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #4 en: 23 Julio 2013, 15:10 pm »

Es simple...

Código
  1. void something(char *text){
  2.    cout << *text;
  3. }

*text es de tipo char... luego cout solo te imprime un carácter.

Código
  1. void something(char **text){
  2.    cout << *text;
  3. }

*text es de tipo puntero a char... o cadena de caracteres... en este caso vuelca caracteres hasta que se encuentra con el primer nulo.

Código
  1. void something(char *text){
  2.    cout << text;
  3. }

Esta última versión es similar a la anterior sin punteros dobles... y por tanto más usable y manejable.
En línea

zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #5 en: 24 Julio 2013, 06:46 am »

Código
  1. void something(char *text){
  2.    cout << *text;
  3. }

*text es de tipo char... luego cout solo te imprime un carácter.
Cuando se invoca la función y se le pasa como argumento el nombre de un vector de caracteres, realmente se le está pasando la dirección de memoria del primer elemento y por ello sólo muestra el primero, ¿verdad?

Código
  1. void something(char **text){
  2.    cout << *text;
  3. }
Esto es un puntero a otro puntero a char.
Cuando se invoque la función y se le pase como argumento la dirección del primer elemento de un vector de caracteres, dicha dirección de memoria es almacenada en text (variable puntero a puntero). Si escribo *text es como mostrar el valor apuntado por text, que viene a ser un puntero a char. ¿Entonces no debería mostrar la dirección de memoria del vector?

Tal vez puedan explicarme un poco que no lo veo tan simple :S
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #6 en: 24 Julio 2013, 07:11 am »

Cuando se invoca la función y se le pasa como argumento el nombre de un vector de caracteres, realmente se le está pasando la dirección de memoria del primer elemento y por ello sólo muestra el primero, ¿verdad?

Si, es cierto, pero la función que recibe un vector de caracteres no se limita a imprimir ese carácter ... la función que recibe un vector de caracteres va a procesar todos los caracteres del vector hasta que encuentre un carácter nulo.

Esto es un puntero a otro puntero a char.
Cuando se invoque la función y se le pase como argumento la dirección del primer elemento de un vector de caracteres, dicha dirección de memoria es almacenada en text (variable puntero a puntero). Si escribo *text es como mostrar el valor apuntado por text, que viene a ser un puntero a char. ¿Entonces no debería mostrar la dirección de memoria del vector?

A ver, cout es una clase de c++. Esta clase tiene varias sobrecargas del operador de inserción ( << ), una para cada tipo de dato soportado.

Cuando a cout se le pasa mediante el operador de inserción un array de caracteres hace exactamente lo que te he comentado, imprimir todos los caracteres que encuentre hasta llegar al primer nulo.

Tu no tienes que mirar las transformaciones que hagas de un dato a la hora de llamar a cout... limítate a ver qué tipo le estás pasando a la clase.

Es decir:

Código
  1. void something(char *text){
  2.    cout << &(*(&(*(&(*text)))));
  3.    cout << text;
  4. }

En ambos casos te va a mostrar una cadena de texto. A la función que recibe el dato únicamente sabe qué tipo le estás pasando, no entiende de las transformaciones previas que le hayas hecho.

En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.927


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #7 en: 24 Julio 2013, 11:09 am »

¿Y si usas cout con cadenas de la libreria standard de C++?  :silbar:
« Última modificación: 24 Julio 2013, 12:00 pm por Eternal Idol 7D » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #8 en: 24 Julio 2013, 11:52 am »

Te refieres a ...

Código
  1. void something( const std::string& text){
  2.    cout << text;
  3. }

Si es el caso... te va a mostrar la cadena de texto, como es de esperar.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.927


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [Opinión] Interesante manera de usar char* con cout
« Respuesta #9 en: 24 Julio 2013, 12:00 pm »

En realidad era una pregunta retorica.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines