Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fedemaxrul en 11 Abril 2017, 17:28 pm



Título: cual es el error en este codigo fuente??
Publicado por: fedemaxrul en 11 Abril 2017, 17:28 pm
la idea es un programa con un array de 9 estructuras, cada una con un puntero a un prefijo metrico y una variable de tipo entero, cuyo valor es el exponente correspondiente para ese prefijo metrico.


 
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define N 9
  5. typedef struct
  6. {
  7.    char*prefijo;
  8.    int exponente;
  9. }prefijos[N]={"femto",-15,"pico",-12,"nano",-9,"micro",-6,"mili",-3,"kilo",3,"mega",6,"giga",9,"tera",12};
  10. int main()
  11. {
  12.    int i;
  13.    for(i=0;i<N;i++)
  14.    {
  15.        printf("%s * %d\n",prefijos[i].prefijo,prefijos[i].exponente);
  16.    }
  17.    return 0;
  18. }
  19.  


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: cual es el error en este codigo fuente??
Publicado por: engel lex en 11 Abril 2017, 17:33 pm
el char no está siendo declarado estaticamente (durante la creación de la variable) sino dinamicamente, así que el char no puede ser solo *, tienes que alojarle un espacio en memoria


Título: Re: cual es el error en este codigo fuente??
Publicado por: MAFUS en 11 Abril 2017, 18:33 pm
Vale, confundes dos cosas: La definición de tipos con typedef y la definición de un array de structs en la misma declaración.

Tu has escrito:
typedef struct { ... }

Esto después de la última llave espera un identificador para un tipo de dato. Sin embargo dices:
} prefijos[N]=...

Con eso lo que quieres es definir una variable array de structs. Esta construcción no puede ir junta.

En tu caso lo que debes hacer es quitar la palabra clave typedef y dejar

struct { ... } prefijos[N]=...

Con esto tendrás un array de N estructuras anónimas (no podrás usar ese tipo en ningún otro sitio del programa para crear más datos).

Pero aún así tienes otro problema:
Cuando inicializas el array haces: prefijos[N]={ ... }.

Esto está bien para un array de elementos simples, pero estás inicializando estructuras de dos elementos, así que deberías hacerlo así:

prefijos[N]={ {elem1, elem2}, {elem1, elem2}, ... , {elem1, elem2} };

En conjunto la nueva definición es esta:
Código
  1. struct {
  2.    char* prefijo;
  3.    int exponente;
  4. } prefijos[N] = {{"femto",  -15},
  5.                 {"pico",   -12},
  6.                 {"nano",   -9},
  7.                 {"micro",  -6},
  8.                 {"mili",   -3},
  9.                 {"kilo",   3},
  10.                 {"mega",   6},
  11.                 {"giga",   9},
  12.                 {"tera",   12}};