Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: natske en Junio 17, 2014, 01:47:48 am

Título: Problema compilación "C" - Principiante
Publicado por: natske en Junio 17, 2014, 01:47:48 am
Hola buenas, estoy comenzando adentrándome en el mundo de programación en "C" tengo una leve experiencia en estos temas pero solo de habla, nada de práctica, por lo que he querido ponerme a aprender a programar en C, mi sistema operativo es ubuntu 14.04 además de las complicaciones que ya me esta suponiendo aprender este idioma le añado a que he tenido que cambiar de SO por temas de estudios, es decir soy novato en ubunto pero por ahora me las apaño. Y aquí viene mi problema:

Estoy empezando a hacer programas con C tipo "hola mundo" y cosas mas novatas del mundo pero al compilar con gcc o con Geany este codigo:
Código: C
  1. #include <stdio.h>
  2.  
  3. int main()
  4.      {
  5.      int num1;
  6.  
  7.      printf( "El tipo int ocupa %i bytes\n", sizeof(int) );
  8.      return 0;
  9.      }

Pues me da los siguienetes errores

Código: [Seleccionar]
gcc -Wall -c "int.c" (en el directorio: /home/natske/Practicas C/Hola Mundo)
int.c: In function ‘main’:
int.c:7:6: warning: format ‘%i’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
      printf( "El tipo int ocupa %i bytes\n", sizeof(int) );
      ^
int.c:5:10: warning: unused variable ‘num1’ [-Wunused-variable]
      int num1;
          ^
La compilación ha terminado con éxito.[/i]

Ya , ya se que probablemente no es un código del cual vaya a depender durante todo mi aprendizaje pero me gustaría saber que estoy haciendo mal para no volver a cometerlo.
Un saludo y gracias por vuestra atención.

___edited___
seleccion de codigo - C
Título: Re:Problema compilación "C" - Principiante
Publicado por: anarius en Junio 17, 2014, 02:32:16 am
Buenas natske :D es cosa de mirar el error o warnning que te da el compilador dice que el argumento %i no es un tipo valido para enteros para mostrar un entero deverias reemplazarlo por %d en caso que quieras representarlo con un numero real osea con coma puedes especificarlo con %.f (Acotacion cuando representas numeros reales y pones el %.f te pone 6 decimales que es el valor por defecto si solo quieres dos pones %.2f) ojala sea de ayuda y tu codigo quedaria asi


Código: C
  1. #include <stdio.h>
  2.  
  3. int main()
  4.      {
  5.      int num1;
  6.  
  7.      printf( "El tipo int ocupa %d bytes\n", sizeof(int) );
  8.      return 0;
  9.      }

___edited___
seleccion de codigo - C
Título: Re:Problema compilación "C" - Principiante
Publicado por: natske en Junio 17, 2014, 03:10:22 pm
Estuve mirando tu respuesta , pero al compilarlo me sigue dando el mismo error pero esta vez envez de con i% con d% y también con %f

El problema podría venir de una mala instalación de la librería o de que el gcc no usa la variable int num1; y el comando de sizeof(int) ?

___add___

¡Resolví el problema!

Según estuve leyendo en la linea en la que resuelve la variable yo uso %i o %d o %f pero en muchos compiladores , en gcc por ejemplo se debe de usar %zu y cuando al principio defino la variable con "int num1;" según he estado mirando es como si no hiciese nada osease que no sirve para absolutamente nada por lo que también daba error, quitando esto y cambiando lo otro quedaría compilado el programa sin ningún problema por lo que quedaría así:
Código: C
  1. #include <stdio.h>
  2.  
  3. int main()
  4.      {
  5.  
  6.      printf( "El tipo int ocupa %zu bytes\n", sizeof(int) );
  7.      return 0;
  8.      }

Muchas gracias de todos modos
:) :)
Título: Re:Problema compilación "C" - Principiante
Publicado por: b10s_0v3rr1d3 en Junio 17, 2014, 04:03:13 pm
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

(respuesta anterior a que saliera la advertencia xD)
@natske: mirate bien el tipo que te devuelve el sizeof() chico y veras facil la respuesta a tu problema.

son tipos unsigned por lo que no tienes que usar ni %i, %d, etc.... sino %zu o %lu (long unsigned), etc....


simplemente son los tipos y la forma en que te lo devuelve la funcion sizeof() (el valor) que es un size_t, por ello se usa dichos tipos %zu o %lu y asi no te da ningun problema.

aqui tienes mas informacion complementaria y con explicacion mas detallada: ___link (http://c.conclase.net/librerias/index.php?ansitip=size_t#inicio)___

nos leemos xDD
Título: Re:Problema compilación "C" - Principiante
Publicado por: ragdoll999 en Junio 18, 2014, 06:36:47 pm
Código: [Seleccionar]
#include <stdio.h>
int main(void){
printf("int:                            %u bytes\n",sizeof(int));
return 0;
}

saludos.
Título: Re:Problema compilación "C" - Principiante
Publicado por: Rorik en Junio 24, 2014, 06:47:43 pm
Y lo de guardar sizeof() como una variable temporal para la depuración no se lleva? :-*



¡Resolví el problema!

Según estuve leyendo en la linea en la que resuelve la variable yo uso %i o %d o %f pero en muchos compiladores , en gcc por ejemplo se debe de usar %zu y cuando al principio defino la variable con "int num1;" según he estado mirando es como si no hiciese nada osease que no sirve para absolutamente nada por lo que también daba error, quitando esto y cambiando lo otro quedaría compilado el programa sin ningún problema por lo que quedaría así:


int num1 no sirve para nada a menos que le asignes un valor y sustituyas int de sizeof() por esa variable, puedes tomar una variable del entorno con fgets() por ejemplo y guardarla en num1.
                 EDITO: mejor un scanf() por que toma valores como int/double en vez de fgets()/gets() que necesitaria una conversion de tipo.