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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con punteros (error programa)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con punteros (error programa)  (Leído 3,176 veces)
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Duda con punteros (error programa)
« en: 11 Agosto 2012, 16:23 pm »

Hola, soy yo otra vez con un  problema con los ejercicios de "Aprendiendo C en 21 días". El problema en cuestión es que al ejecutar un programa me da un error. El susodicho programa es el siguiente:
Código:
#include <stdio.h>

int main()
{
    char *cadena;
    
    gets(cadena);
    while(*cadena!='\0')
        putchar(*cadena);
        cadena++;
}
El libro dice que el programa debe pasar carácter a carácter toda la cadena a la impresora con redirección. Como el tema de la redirección se puede hacer con el sistema operativo (creo que no me pide el ejercicio que lo haga con flujos), he decidido hacerlo así.
Como dije antes, me da error al ejecutarlo.
¿Alguien me puede decir por qué pasa esto?


« Última modificación: 11 Agosto 2012, 17:05 pm por apoeti » En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #1 en: 11 Agosto 2012, 16:44 pm »

el principal error yo diria que es que estas declarando un puntero a char pero en ningun momento reservas memoria para el. ademas, te faltan los {} en el while ya que hay mas de una instruccion dentro de el. luego si dices que el main devuelve un int, te falta el return 0 al final (0, o lo que tu quieras, pero algo que signifique que ha acabado bien).

Código
  1. #include <stdio.h>
  2. #include <stdlib.h> //malloc()
  3. #include <string.h> //memset()
  4.  
  5. #define MAX 20
  6.  
  7. int main()
  8. {
  9.    char *cadena;
  10.  
  11.    cadena=(char*)malloc(MAX*sizeof(char));
  12.    memset(cadena, '\0', sizeof(cadena)); //inicializas a NULL toda la cadena
  13.    fgets(cadena, MAX-1, stdin);
  14.    while(*cadena!='\0') {
  15.        putchar(*cadena);
  16.        cadena++;
  17.    }
  18.    return 0;
  19. }

edito: por cierto, acosumbrate a usar fgets() en lugar de gets(), ya que con esta ultima no puedes limitar el numero de caracteres introducidos por el usuario y te puede dar problemas con overflows y demas.


« Última modificación: 11 Agosto 2012, 16:45 pm por xiruko » En línea

apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #2 en: 11 Agosto 2012, 16:50 pm »

Gracias por la respuesta. Pero, una cosilla, yo pensaba que no hacía falta de forma obligatoria (aunque sí es recomendable) asignarle memoria a un puntero ¿Estaba equivocado y ha de hacerse siempre?

P.D: Respecto a lo de usar fgets(), siempre me dais el mismo consejo y pienso hacerlo en cuanto acabe el libro, descuida. Es más que nada por seguir el patrón que ofrece el libro y no perderme. :)

P.D. 2: Me he fijado en que todos los que me contestáis y ponéis código lo ponéis con colores, ¿cómo hacéis para pegarlo con los colores, o lo escribís aquí directamente?

Saludos.
« Última modificación: 11 Agosto 2012, 16:57 pm por apoeti » En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #3 en: 11 Agosto 2012, 16:57 pm »

si que es cierto que no hay que reservarle memoria obligatoriamente a un puntero, pero si que hay que inicializarlo y decirle que apunte a algun sitio. hay 2 maneras para hacer esto:

1. reservar memoria como en el ejemplo anterior.
2. darle la direccion de alguna variable para que apunte a ella. como esa variable ya habia sido declarada, no tienes que declarar mas memoria. en el caso de strings, el mismo nombre de la cadena ya es un puntero al comienzo de la cadena. el ejemplo de antes hecho de esta manera podria ser asi:

Código
  1. #include <stdio.h>
  2.  
  3. #define MAX 20
  4.  
  5. int main()
  6. {
  7.    char *cadena, cadena2[MAX];
  8.  
  9.    cadena=cadena2;
  10.    fgets(cadena, MAX-1, stdin);
  11.    while(*cadena!='\0') {
  12.        putchar(*cadena);
  13.        cadena++;
  14.    }
  15.    return 0;
  16. }

edito: para poner el codigo con colores, selecciona las etiquetas GeSHi cuando escribas el mensaje. en este caso, serian asi [code = c][ / code] (sin ningun espacio en ellas, pero es que sino no aparece).
« Última modificación: 11 Agosto 2012, 16:59 pm por xiruko » En línea

apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #4 en: 11 Agosto 2012, 16:59 pm »

Muchas gracias. Todo claro.  :D
En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #5 en: 11 Agosto 2012, 17:00 pm »

de nada!  ;D
En línea

apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #6 en: 11 Agosto 2012, 17:02 pm »

Te había enviado un privado para lo de los colores, pero veo que estuviste atento al hilo :)
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con punteros (error programa)
« Respuesta #7 en: 12 Agosto 2012, 01:19 am »

Hola, soy yo otra vez con un  problema con los ejercicios de "Aprendiendo C en 21 días".
Revisando de forma superficial ese libro tiene ciertos detalles (como el uso de "gets" y "scanf" en el capitulo sobre entrada y salida) que, honestamente, me parecen suficiente como para no recomendarlo a un principiante.

Una mejor opción es "The C programming Language", otro libro muy bueno pero disponible solo en ingles es "Pointers on C" de Kenneth Reek.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre punteros
Ejercicios
maryrisas 1 3,954 Último mensaje 23 Febrero 2006, 17:59 pm
por [[JONAS]]
[C] - Duda punteros
Programación C/C++
h0oke 2 2,338 Último mensaje 23 Mayo 2010, 02:19 am
por h0oke
Errores con programa (punteros)
Programación C/C++
jamatbar 0 1,343 Último mensaje 10 Diciembre 2011, 18:59 pm
por jamatbar
Duda con punteros
Programación C/C++
cazagavilan 5 2,846 Último mensaje 14 Abril 2012, 05:47 am
por cazagavilan
Error en programa de punteros
Programación C/C++
Error 404: 7 2,694 Último mensaje 24 Mayo 2013, 11:24 am
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines