Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LucasNahuel en 20 Mayo 2016, 21:03 pm



Título: Punteros!
Publicado por: LucasNahuel en 20 Mayo 2016, 21:03 pm
Hola a todos, estoy comenzando con punteros y tengo una duda, quiero pegarle un valor a un array, y luego mostrarlo. algo simple. disculpen mi pregunta tonta.. pero no me sale!
El programa

Citar

typedef struct
{
    int id;
    char name[50];
    char lastName[50];
    char email[50];
    char gender[50];
    char ip[50];

}Employee;

int main()
{
        Employee pEmployee[10];
        int indice;

        printf("Ingrese el indice donde quiere guardar los datos");
        scanf("%d",& indice);
      
        (pEmployee+indice)->id=800;
        strcpy((pEmployee+indice)->name,"name"); //creo que un error lo tengo aca, como lo estoy guardando
        strcpy((pEmployee+indice)->lastName,"lastName");
        strcpy((pEmployee+indice)->email,"email");
        strcpy((pEmployee+indice)->gender,"gender");
        strcpy((pEmployee+indice)->ip,"ip");

        ACA esta el problema, no tengo idea como mostrarlo con un printf porque por ejemplo coloco esto, aunque puede ser que el error solo sea el mencionado arriba, de como guardo los datos.

      printf("ID: %d\t NAME: %s",pEmployee[indice]->id,pEmployee[indice]->name); y ya me sale error..
}


Título: Re: Punteros!
Publicado por: crack81 en 20 Mayo 2016, 21:31 pm
Mira te dejo este codigo corregido para que le des una mirada:

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. typedef struct
  5. {
  6.    int id;
  7.    char name[50];
  8.    char lastName[50];
  9.    char email[50];
  10.    char gender[50];
  11.    char ip[50];
  12.  
  13. }Employee;
  14.  
  15. int main()
  16. {
  17.        Employee pEmployee[10];
  18.        int indice;
  19.  
  20.        printf("Ingrese el indice donde quiere guardar los datos: ");
  21.        scanf("%d",&indice);
  22.  
  23.  
  24.        pEmployee[indice].id=800;
  25.        strcpy(pEmployee[indice].name,"name"); //creo que un error lo tengo aca, como lo estoy guardando
  26.        strcpy(pEmployee[indice].lastName,"lastName");
  27.        strcpy(pEmployee[indice].email,"email");
  28.        strcpy(pEmployee[indice].gender,"gender");
  29.        strcpy(pEmployee[indice].ip,"ip");
  30.  
  31.        printf("ID: %d\t IP: %s",pEmployee[indice].id,pEmployee[indice].ip); //y ya me sale error..
  32.        return 0;
  33. }

En realidad no estas usando punteros, esta forma seria usando arreglos dinamicos o "punteros"

Código
  1. int main()
  2. {
  3.        Employee *pEmployee=malloc(sizeof(Employee)*10);
  4.        int indice;
  5.  
  6.        printf("Ingrese el indice donde quiere guardar los datos: ");
  7.        scanf("%d",&indice);
  8.  
  9.  
  10.        pEmployee[indice].id=800;
  11.        strcpy(pEmployee[indice].name,"name"); //creo que un error lo tengo aca, como lo estoy guardando
  12.        strcpy(pEmployee[indice].lastName,"lastName");
  13.        strcpy(pEmployee[indice].email,"email");
  14.        strcpy(pEmployee[indice].gender,"gender");
  15.        strcpy(pEmployee[indice].ip,"ip");
  16.  
  17.        printf("ID: %d\t IP: %s",pEmployee[indice].id,pEmployee[indice].ip); //y ya me sale error..
  18.  
  19.        free(pEmployee); //liberamos la memoria
  20.        return 0;
  21. }


Título: Re: Punteros!
Publicado por: LucasNahuel en 20 Mayo 2016, 21:35 pm
si, es que en la facultad me enseñaron a hacer como vos lo hiciste, pero ahora quiere que utilize punteros, y utilize el operador flecha no el punto.. pero bueno, por lo que veo no vengo bien en la facultad jaja :(


Título: Re: Punteros!
Publicado por: crack81 en 20 Mayo 2016, 21:40 pm
Hola la verdad es que si puedes usar el -> pero es una chorrada cuando hablamos de arreglos ya que con acceder al arreglo en forma de indice basta

Pero si quieres que tu codigo original funcione basta con que imprimas los valores asi

Código
  1. (pEmployee+indice)->id=800;
  2. printf("indice %d",(pEmployee+indice)->id);


Título: Re: Punteros!
Publicado por: HardForo en 20 Mayo 2016, 22:03 pm
Voy a hacer una pregunta muy ingenua: cuál es la necesidad de usar strcpy() en este programa ?


Título: Re: Punteros!
Publicado por: engel lex en 20 Mayo 2016, 22:25 pm
Estas asignando un char* const a un char*, es igual que hacer esto
Código
  1. int a[10];
  2. int b[10];
  3. //llenamos a
  4. b=a;
b
Esto no hará nada esperado XD

Tienes que copiar la memoria de las posiciones del array


Título: Re: Punteros!
Publicado por: HardForo en 21 Mayo 2016, 01:42 am
Muy amable Alex lex  ;D

Aun hay (muchas) cosas que se me escapan