|
|
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Bichissimo Forista

Registrado: 18 Oct 2006 Mensajes: 231 Ubicación: La otra dimension!!!
|
Publicado: Jue Abr 24, 2008 3:36 am Asunto: Acerca de variable tipo bool y una declaracion de cadena |
|
|
Hola a todos
Pues eso ¿el compilador gcc admite variables "bool"? al tratar de compilar un programa en C me sale con
"error: 'bool' undeclared (first use in this function)"
Y acerca de mi otra duda, la declaracion de una cadena normalmente se hace con un:
| Código: | | char nombredelacadena[tamaño] |
pero tambien se puede con un:
| Código: | | char *nombredelacadena |
sin embargo al querer meter un dato a esa cadena con un "gets" me sale "Segmentation fault" ¿A que se debera esto?
Saludos. _________________
. |
|
| Volver arriba |
|
 |
l.juan Forista

Registrado: 03 Jul 2004 Mensajes: 507 Ubicación: México, D.F.
|
Publicado: Jue Abr 24, 2008 7:40 am Asunto: |
|
|
El tipo de datos booleano se introduce hasta C99 el cual define la librerÃa: stdbool.h
Y un arreglo de char es diferente a un apuntador a char. En uno, la memoria se reserva desde que se ejecuta esa lÃnea (arreglo) y con el apuntador, tu tienes que reservar la cantidad de memoria manualmente. (malloc y familia). _________________ "La televisión me respeta, se rÃe con migo, y no de mÃ"
Homero J. Simpson |
|
| Volver arriba |
|
 |
Bichissimo Forista

Registrado: 18 Oct 2006 Mensajes: 231 Ubicación: La otra dimension!!!
|
Publicado: Vie Abr 25, 2008 2:54 am Asunto: |
|
|
Hola I.juan:
Gracias por aclararme lo de las variables bool, sin embargo no me quedo claro lo del apuntador a la cadena, tengo entendido que al hacer "[longitud]" en una cadena es porque sabes la longitud de la misma, pero en el caso de que no la sepa me dijeron que se podria hacer con un apuntador para que pueda ocupar una longitud que yo quiera, lamentablemente en clase programamos con visual basic y pues, alli se puede declarar y escribir en la cadena asi, con un apuntador, en linux no hay problema con la declaracion sino que no puedo meter datos.
Saludos. _________________
. |
|
| Volver arriba |
|
 |
demasiadovivo Forista

Registrado: 25 May 2005 Mensajes: 1051 Ubicación: secret place
|
Publicado: Vie Abr 25, 2008 3:51 am Asunto: |
|
|
Primero te queria comentar que no deberias usar gets, en el mismo manual de gets dice:
| Cita: | No use nunca gets(). Puesto que es imposible saber, sin conocer de antemano los datos, cuántos caracteres va a leer gets(), y
puesto que gets() continuará guardando caracteres una vez alcanzado el final del búfer, su empleo es extremadamente peligroso.
Muchas veces ha sido utilizado para comprometer la seguridad de un sistema. En su lugar emplee fgets() siempre que pueda. |
Ahora, sobre la declaracion, el problema que tenes es q estas declarando un puntero a una cadena y no una cadena. Lo que hace gets es guardar lo leido en stdin en el buffer apuntado por nombredelacadena, pero si nombredelacadena no esta apuntando a ningun buffer tenes un error entre manos. Cuando declaras un puntero a algo, este apunta a un lugar indeterminado, muy probablemente apuntando a un area de memoria que no corresponde al usuario, entonces al asignarle algo te da segmentation fault.
Lo que deberias hacer es crear un buffer antes de usar la llamada a gets. Esto lo podes hacer (como dijo I.juan) con malloc. _________________
 |
|
| Volver arriba |
|
 |
Bichissimo Forista

Registrado: 18 Oct 2006 Mensajes: 231 Ubicación: La otra dimension!!!
|
Publicado: Sab Abr 26, 2008 7:07 am Asunto: |
|
|
entendido demasiadovivo!! gracias por la explicacion, ahora me toca investigar acerca de fgets y malloc.
saludos. _________________
. |
|
| Volver arriba |
|
 |
|
|
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
|
La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute", el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros paises
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute, the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries
Powered by phpBB © 2001, 2002 phpBB Group
POWERED BY ISANUMBER φ
|