Soucis avec des pointeurs, des tableaux, des char*
Bonjour,
J'ai un soucis avec le code se trouvant ci-dessous.
En particulier avec la fonction gestionEtiquettes.
Je passe un tableau de char* en paramètre, ainsi que d'autres char*
à un moment je souhaite mettre la valeur de etiq dans la case en cours du tableau
or, ce que je fais c'est que je fais pointer la case de mon tableau à la même case que le char*
ce qui ne m'arrange pas à dire vrai vu que je veux réutiliser mon tableau et ses nouvelles valeurs hors de ma fonction.
(sachant que quand je rentre manuellement une chaine de caractère (par exemple : "tata") dans mon tableau avec cette fonction, le tableau garde les valeurs initialisées à "tata" hors de la fonction)
Comment faire ?
voilà comment j'appelle ma fonction ainsi que les variables déclarées :
Code:
1 2 3 4 5
| char* etiquettes[512] ;
char ligne[TOKENSIZE], op[TOKENSIZE], etiq[TOKENSIZE], ri[TOKENSIZE], rj[TOKENSIZE], rk[TOKENSIZE], nc[TOKENSIZE];
int tailleProg ;
gestionEtiquettes(etiquettes, op, ri, rj, rk, nc, &tailleProg, ligne, etiq) ; |
Tokensize correspond à 79 et est déclaré ailleurs
voici maintenant le code de ma fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| /*
Compilation:
+ compiler poly_parser.c: gcc -c poly_parser.c
+ compiler assembleur.c: gcc -std=c99 -o assembleur assembleur.c poly_parser.o
*/
#include <stdio.h> // pour manier les fichiers
#include <string.h> // pour manier les chaines de caractères
#include "poly_parser.h" // pour utiliser la fonction poly parser
void gestionEtiquettes(char* etiquettes[],char* op,char* ri, char* rj, char* rk, char* nc, int *tailleProg, char* ligne, char* etiq)
{
int cpt = 0 ;
FILE* fic = fopen("essai.asm","r");
while(fgets(ligne,79,fic) != NULL)
{
if (poly_parsing(ligne,etiq,op,ri,rj,rk,nc))
{
etiquettes[cpt] = etiq ;
printf("nia etiquette : %s \n",etiquettes[cpt]) ;
}
cpt ++ ;
}
*tailleProg = cpt ;
fclose(fic) ;
}
// Je fournirais la suite du code si besoin |
merci d'avance (j'ai eu beau chercher sur google je n'ai rien trouvé :( ou pas compris ce qui m'était proposé)