[C con Clase] Punteros, otra vez
Programante
programante en gmail.com
Sab Mar 3 17:05:30 CET 2007
Alejandro Vilar López escribió:
> ¿Por qué sucede esto?
Por como realiza internamente las cosas tu compilador. En realidad
debería fallar con ambas formas.
No inicializas puntero, por lo que apuntará a "cualquier sitio" (muy
probablemente que no es tuyo). A continuación haces gets(puntero), con
lo que se escribe en cualquier sitio un número indeterminado de bytes
(gets() es insegura, pues se pueden producir desbordamientos de buffer,
usa en su lugar fgets(puntero, tamaño_del_buffer, stdin) ).
Cuando intentas escribir en "cualquier sitio", el sistema operativo lo
detecta y te cierra el programa.
Tienes dos opciones, asignar memoria dinámica al puntero:
char* puntero; //apunta a cualquier sitio
puntero = malloc(tamBuffer); //apunta a tamBuffer bytes de memoria que
nos da el SO
fgets(puntero, tamaño_del_buffer, stdin); //gets(puntero);
free(puntero); //¡Hay que acordarse de liberar la memoria!
O bien no creando un puntero sino un array:
char antiguo_puntero[tamBuffer];
fgets(antiguo_puntero, tamaño_del_buffer, stdin); //gets(antiguo_puntero);
Un saludo
Más información sobre la lista de distribución Cconclase