Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 28 Agosto 2016, 18:09 pm



Título: (Consulta) Porque no me funciona gets(string)
Publicado por: palacio29 en 28 Agosto 2016, 18:09 pm
Hola

Quiero realizar un programa en donde me pida algunos datos y quiero guardar uno de ellos en un arreglo con la funcion gets(string). El problema es que al realizar la carga es como que se saltea la funcion y me pide ingresar los datos del proximo dato.

La parte donde falla es la siguiente

Código
  1.  fila=0;
  2.        printf ("\nIngrese el nombre del alumno: ");
  3.        gets(nombre);
  4.        printf ("\nIngrese el numero de comision:  ");
  5.        scanf ("%d",&comision);
  6.        printf  ("\n%s",nombre);
  7.  
  8.  

Al ejecutarlo directamente se saltea el gets y empieza por "Ingrese el numero de comision". A este codigo le faltan declarar variables, etc pero quizas no estoy entendiendo el funcionamiento de la funcion, que desventajas tiene ,etc o porque se saltea?.

Muchas gracias


Título: Re: (Consulta) Porque no me funciona gets(string)
Publicado por: Ivancamilo en 28 Agosto 2016, 18:26 pm
Declara la variable nombre como un array de tipo char[100], dándole una longitud que no sea tan exagerada:
Código
  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. char nombre[100];
  10. int comision;
  11. printf ("\nIngrese el nombre del alumno: ");
  12.    gets(nombre);
  13.    printf ("\nIngrese el numero de comision:  ");
  14.    scanf ("%d",& comision);
  15.    printf  ("\n%s",nombre);
  16.  
  17. system("pause");
  18. return 0;
  19. }
  20.  


Título: Re: (Consulta) Porque no me funciona gets(string)
Publicado por: AlbertoBSD en 28 Agosto 2016, 20:22 pm
Recomiendo mejor el uso dw fgets para poder limitar la entrada y no causar un bufferoverflow:

Código
  1. fgets(cadena,limite,stdin);

Donde cadena es un char de longitud limite, limite nos limita la entrada de datos y stdin es la entrada estandar

Saludos