Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error funcion gets

Estas en el tema de error funcion gets en el foro de C/C++ en Foros del Web. Hola Estoy haciendo un programa en c y tengo un pequeño problema a la hora de recoger cadenas de caracteres con la función gets, la ...
  #1 (permalink)  
Antiguo 02/04/2014, 02:27
 
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
error funcion gets

Hola
Estoy haciendo un programa en c y tengo un pequeño problema a la hora de recoger cadenas de caracteres con la función gets, la tengo escrita así:
char * c1 = "";
gets(c1);
puts (c1);
que es como veo en la documentación que se usa, pero el programa se detiene.
¿Alguien podría decirme en qué falla?
Gracias por adelantado
  #2 (permalink)  
Antiguo 02/04/2014, 02:51
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: error funcion gets

El problema con tu función es que al hacer gets, además del carácter que introduces estas intentando también almacenar (inconscientemente) el salto de linea ("\n").

Por lo que estas intentando almacenar dos caracteres en un puntero a char con espacio para un solo carácter

La solución que puedo darte, es que en vez de usar char*, definas la variable como:

char c1[2];

Otra solución puede ser usar otra función como getchar:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.   //  char c[2];
  5.   int c;
  6.  
  7.   c = getchar();
  8.   putchar(c);
  9.   return 0;
  10. }
  #3 (permalink)  
Antiguo 02/04/2014, 02:54
 
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: error funcion gets

pero esta solución sería para recoger caracteres, ¿no? y yo lo que quiero recoger son cadenas de caracteres
  #4 (permalink)  
Antiguo 02/04/2014, 03:21
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: error funcion gets

Vale, según mi poca experiencia, C no tiene un tipo de datos Cadena de caracteres, por tanto para recogerlas debemos definir vectores char con un tamaño fijo definiendo c1 por tanto como sigue:

char c[256];

o, como tu haces, definir un puntero a char. Pero antes de almacenar una cadena, deberás reservar el espacio de memoria para tal cadena. Por ejemplo del siguiente modo:

char *c = (char*)malloc(sizeof(char)*256);

Si usas esta opción deberas usar free(c); cuando el vector haya cumplido su función para no desaprovechar memoria.

Ambos casos te darían para 256 caracteres.

Etiquetas: cadenas, caracteres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:56.