tableau de char *, 2eme argument d'execvp
Salut a tous,
je voudrais lancer un script ( .sh) a partir d'un programme c, en lui passant une liste de char * .
Je crois que le plus simple est un execvp("Monscript.sh", MaMatrice.de.Char), et ainsi MonScript.sh aura les char* dans ses variables &1, &2 etc...
Mon probleme est que je n'arrive pas a remplir MaMatrice... Je suis perdu entre les erreurs de segmentation et les erreurs de type...
Mon ideal serait de pouvoir decider dynamiquement du nombre de char* que je donne a ma matrice (enfin tableau de char* quoi...)
Voila ce que j'ai fait jusqu'a present:
(je laisse en commentaire les differents essais que j'ai pu faire, si ca peut vous eclairer...)
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 31
|
char * MyTestcchar[20];
// MyTestcchar = (char **)malloc(sizeof(char)*100); //Why doesn't it works ???
/* MyTestcchar = (char ** )malloc(sizeof(char)*10*20);
MyTestcchar[0] = (char *)malloc(sizeof(char)*10);
MyTestcchar[1] = (char *)malloc(sizeof(char)*10);
MyTestcchar[2] = (char *)malloc(sizeof(char)*10);
MyTestcchar[3] = (char *)malloc(sizeof(char)*10);
MyTestcchar[4] = (char *)malloc(sizeof(char)*10);
MyTestcchar[5] = (char *)malloc(sizeof(char)*10);
sprintf(MyTestcchar[0], "1st case");
sprintf(MyTestcchar[1], "2nd case");
sprintf(MyTestcchar[2], "3rd case");
sprintf(MyTestcchar[3], "4th case");
sprintf(MyTestcchar[4], "5rd case");
sprintf(MyTestcchar[5], "6th case");
printf("\n\nTestcchar : %s\n",MyTestcchar[0]);
*/
pid_t child_script;
child_script = fork();
if(child_script == 0){
if(execvp("./SampleAlexPart.sh",&MyTestcchar[0]) < 0) {
printf("*** ERROR: execvp failed *** \n");
exit(1); }
}
else {
wait(NULL);
} |
Merki d'avance ;)
(au fait je suis pas du tout absolument pour utiliser un execvp, ou bien faire un tableau de char*, si vous avez une idee qui pose pas de probleme d'allocation memoire... je prend ;) )
Remerciements et complément
Merci Franck et Dark_Ebola :)
bon ca doit pas vous étonner, ca marche ... ;)
Je tiens a m'excuser pour la FAQ ... :oops:
Sinon Franck, hum...
Citation:
Bin ceci est complètement faut:
Code :
Code:
1 2
|
if(execvp("./SampleAlexPart.sh",&MyTestcchar[0]) < 0) |
Ici tu passes l'adresse du premier caractère de l'indic 0 de ton tableau de char or la fonction attend le tableau de char au complet, passe simplement le nom de ton tableau comme pour tout autre argument, je ne vois rien de compliqué, faut juste rester censé et... logique !
Oui cela me permet de choisir a partir de quel indice je veux qu' execvp "voie" mon tableau. En effet, si je ne me trompe pas,
&MyTab[0] = MyTab
et ainsi en faisant &MyTab[i] , je peux donner mon tableau a execvp en lui faisant "croire" que le tableau commence a l'indice i ...
En fait mon execvp marche en utilisant la notation &MyTab[i] . Mais du coup je comprend pas bien ce qui ne marchait pas dans mon code original : c'est le cast (char *) devant le malloc que j'aurais pas du mettre ? mais du coup il sert a quoi ce cast, si on peut ne pas le mettre ?