Autor
|
Tema: Errores raros después de una compilación normal (Leído 2,741 veces)
|
jeanmlduarte
Desconectado
Mensajes: 3
|
Hola, buenas a todos! me eh comprado um livro/manual de programación c/c++ de miguel angel acera, y pues con este libro estoy iniciando en este mundo. Utilizo Ubuntu 16.10 - Atom 1.14.3x64, y todos mis programas los compilo através del terminal con el comando gcc -o, y ya es la segunda vez que compilo un ejemplo y me sale un error en el programa. No lo entiendo pues, al momento de la compilación lo único que me avisa que algunas funciones son vulnerables. en el momento que relleno una estructura salta a la segunda estructura dejando el parametro nombre hacia atras sin poder rellenar, no se si me explico dejo una imagen para que se vea mas claro. Gracias antemano! http://imageshack.com/a/img922/5695/MOwux0.png
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
En vez de gets(persona.nombre), utiliza fgets: fgets(char* cadena , int tamañoCadena , FILE * stream )
Lo llamarías: fgets(persona. nombre, 30, stdin )
|
|
|
En línea
|
|
|
|
jeanmlduarte
Desconectado
Mensajes: 3
|
Muchas gracias por contestar ivancea96! ahora el problemas es sobre clang, Atom me decía para que verificara si tuviera instalado clang como compilador y buscando por google un poco encontre como instalarlo y la verdad es que no sabia de su existencia, bien ahora al compilar lo hago de esta manera clang -wall *.c me sale el archivo a.out lo ejecuto con el comando ./a.out y seguimos con el mismo error. Cambie el codigo como indicaste quedando asi.
for (n=1; n<=3; n++) { printf ("\n\nNombre: "); fgets (persona.nombre, 30, stdin); printf("\nEdad: "); scanf("%d", &persona.edad); fwrite (&persona, sizeof (persona), 1, fichero); }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Bien, el problema es que scanf deja un salto de línea en stdin. fgets lo lee, y da como terminada la lectura. Para ello, puedes usar:
Ese %*c lee un caracter y no lo guarda. Esta es la solución rápida. Otra solución sería leer siempre cadenas y, cuando sea un número, convertirla con la función int atoi(char*)
|
|
|
En línea
|
|
|
|
jeanmlduarte
Desconectado
Mensajes: 3
|
Bien!! ahora si, muchas gracias, pero a que se deve estos problemas? tiene que ver con las anticuadas versiones de C/C++ con las que estoy aprendiendo?
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
No, es cosa del funcionamiento de las funciones, sin más. Tú cuando escribes algo en consola y pulsas enter, se envía esto: "12345\n". Ese salto de línea del final, scanf no lo quita del stream, así que se queda ahí. Entonces, cuando fgets trata de leer la línea, se encuentra con ese '\n'. fgets, como otras funciones, cuando encuentra un '\n', deja de leer, así que ya ni te deja escribir.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Errores raros :S
Java
|
Luisango
|
4
|
3,268
|
5 Junio 2007, 15:13 pm
por alvk4r
|
|
|
Pasar caracteres raros a texto normal
Dudas Generales
|
GN1000
|
8
|
7,860
|
28 Agosto 2013, 22:24 pm
por Esgrimidor
|
|
|
errores raros de visual basic
Programación Visual Basic
|
leliCabello
|
0
|
1,517
|
30 Octubre 2010, 23:08 pm
por leliCabello
|
|
|
Ayuda con función (Errores raros)
Programación C/C++
|
bsantana
|
4
|
2,129
|
12 Abril 2016, 05:42 am
por bsantana
|
|
|
Errores de compilacion en C
Programación C/C++
|
maxbox
|
2
|
2,610
|
11 Julio 2018, 17:35 pm
por engel lex
|
|