Como leer cadenas en C.

Urien

Bueno mi profesor ha dicho ke es mejor hacerlo con:

scanf("%s", cad);

Y yo creo ke es mejor con:

gets(cad);

El argumenta ke es mejor porke puedes poner scanf("%20s", cad); por ejemplo para limitarlo a 20 caracteres y ke si el usuario te mete 30 no te casque el programa pero yo sugiero ke es mejor el gets(cad); porke no tienes el problema del buffer de teclado (solucionable con fflush(stdin)) y porke scanf no te lee mas allá del espacio.

A ver si me sacais de dudas sobre ke es mejor porke...

PD: Me comenta ke no puedes hacer ke te lea una frase por teclado limitando el numero de caracteres en C, supongo ke no hay nada ke tenga lo mejor de las 2 funciones no? xD.

aLeX

Es un peligro usar gets porque podrían introducirte una cadena mayor que el buffer, producirse un overflow y alterarse tu programa en ejecución. Es una manera bastante fácil de, al menos, bloquear una máquina (y si eres un friki puedes directamente hackearla).

En su lugar usa fgets(buffer,size,stdin), donde puedes definir el tamaño máximo del buffer que vas a leer, lo que evitar overflows y hackeos.

javithelong

fgets y sscanf para parsearlo, sin duda, Alex tiene razón ;)

dr_Rouman

De hecho si usas gets(); el gcc te dice que no, que es peligrosa (aunque creo que es sólo un aviso).

Usuarios habituales

  • dr_Rouman
  • javithelong
  • aLeX
  • Urien