2013-01-08 1 views
0

J'ai une fonction qui prend comme argument un pointeur vers un tableau de struct:Copie struct Tableau de Structs reçus comme pointeur dans la fonction Argument

void foo (int *StructArrayAddress) 

Au sein de la fonction, je puis construire une nouvelle struct qui ressemble à ceci

struct 
{ 
    int a; 
    int b; 
    char c[10]; 
}myStruct; 

ce que je voudrais alors faire est de copier que struct à mon tableau de struct, en fonction du pointeur sur ce tableau que j'ai reçu comme argument. Ne pas avoir de chance avec la syntaxe, ou il me manque quelque chose. Quelqu'un peut-il conseiller? Merci!

EDIT: Je ne suis pas sûr de m'être expliqué correctement, car je ne pense pas que la solution affichée ici soit ce que je veux faire. Pour clarifier: il y a un certain nombre de structures en dehors de ma fonction ici. Je reçois l'adresse de l'élément struct correct dans un tableau de structs en tant qu'argument de ma fonction. Supposons que l'appelant a déjà pris soin de me transmettre la bonne adresse; Je n'ai pas besoin de l'indexer du tout. Je construis ensuite localement une structure à partir d'autres données. Je veux maintenant copier cette structure que j'ai construite localement à la structure à l'emplacement dans le tableau que j'ai reçu en tant qu'argument.

void foo (int *StructArrayAddress) 
{ 
    struct 
    { 
     int a; 
     int b; 
     char c[10]; 
    }myStruct; 

    a = 5; 
    b = 10; 
    c = {1,2,3,4,5,6,7,8,9,10}; 

    //Copy local struct myStruct to location StructArrayAddress here 
    StructArrayAddress = myStruct; //Something like this but I have the syntax wrong 
} 

J'espère que cela a plus de sens.

EDIT2: J'ai peut-être réalisé que quelque chose que vous avez essayé de me transmettre me manquait: une référence à ma structure locale nécessaire dans l'argument de sorte que le format de la structure que je passe le dos est connu?

+2

Si l'argument est censé être un pointeur vers un tableau de 'struct's, pourquoi est-il déclaré comme' int * '?? –

+0

Pouvez-vous poster le reste du code de votre fonction? –

+0

@Daniel Fischer: Ma pensée était que, bien que ce soit un tableau de structures, l'adresse est toujours la même taille, non? – nobby

Répondre

0

Votre définition de la fonction devrait être comme

void foo (myStruct *StructArrayAddress, int index) 
{ 
    myStruct x; 
    x.a = 1; 
    x.b = 2; 
    strncpy(x.c, "Test", 9); 

    /* Now copy this struct to the array of structs at index specified by second argument */ 

    memcpy((StructArrayAddress + index), &x, sizeof(myStruct)); 


} 
+1

Le 'memcpy' pourrait être omis. 'StructArrayAddress [index] = x;' est bon. –

+0

x est une variable locale qui ne sera pas copiée dans le tableau des structures. –

+0

Pouvez-vous clarifier ce que j'ai mal fait avec la question? – nobby

Questions connexes