• Domingo 15 de Diciembre de 2024, 07:00

Autor Tema:  Duda con puntero  (Leído 1396 veces)

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Duda con puntero
« en: Martes 15 de Septiembre de 2009, 18:25 »
0
Hola amigos, tengo un código que me está dando problemas.
Tengo un array de estructuras y quiero modificarlo dentro de una función por medio de punteros.
No entiendo por qué lo hago mal. Haber si pueden hecharme un cable, gracias

Código: C
  1.  
  2.  
  3. main.c
  4.  
  5. typedef struct
  6. {
  7. char nombre[20];
  8. int puntos;
  9. }ITEM;
  10.  
  11.  
  12. void func1(ITEM *persona, int longitud)
  13. {
  14.  
  15. char *nombres[]={"Fernando","Pablo"};
  16. int i;
  17.    
  18.         for(i=0;i<longitud;i++)
  19.         {
  20.                strcpy(&(*(persona+i)).nombre,*(nombres+i));  // aqui falla
  21.                 &(*(persona+i)).puntos=30;
  22.         }
  23.  
  24. int main( int argc, char *argv[])
  25. {
  26.    
  27.  ITEM listaitem[]=
  28.  {
  29.  {"Manuel",20},{"Fernando",10}
  30.  };
  31.  
  32.  int i;
  33.  
  34.     func1(listaitem,2);
  35.  
  36.    
  37.     for(i=0;i<2;i++)
  38.     {
  39.         printf("n %s %d",listaitem[i].nombre,listaitem[i].puntos);
  40.     }
  41.    
  42.    
  43. }
  44.  
  45.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda con puntero
« Respuesta #1 en: Martes 15 de Septiembre de 2009, 19:15 »
0
Te falta un casting y te sobra un ampersand:
Código: C++
  1. strcpy((char*)&(*(persona+i)).nombre,*(nombres+i));
  2. (*(persona+i)).puntos=30;
  3.  
 
Pero al menos yo jamas lo haria asi, demasiado engorroso, asi es mas simple:
Código: C++
  1. strcpy(persona[i].nombre, nombres[i]);
  2. persona[i].puntos = 30;
  3.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Duda con puntero
« Respuesta #2 en: Martes 15 de Septiembre de 2009, 19:32 »
0
Vaya, se me olvidó hacer el cast.
El ampersand era involuntario(copie la linea de arriba y le borre el .nombre).
Llevas razón, es engorroso de leer jeje. Suelo usar la otra sintaxis, pero en este programilla use punteros para evitar
que se me olvidaran.
Muchas  Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda con puntero
« Respuesta #3 en: Martes 15 de Septiembre de 2009, 20:56 »
0
De nadas  :beer:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.