cs_elite182
Messages postés6Date d'inscriptionmardi 15 mars 2011StatutMembreDernière intervention16 mai 2011
-
5 mai 2011 à 14:30
cs_elite182
Messages postés6Date d'inscriptionmardi 15 mars 2011StatutMembreDernière intervention16 mai 2011
-
7 mai 2011 à 19:48
Bonjour a tous !!
Je rencontre actuellement un probleme sur le C.
Comme vous me l'avez explique la derniere fois en cours, j'ai obtenu un pointeur de pointeur de caractere , me permettant de stocker dans un tableau chaque argument de la ligne de commande taper par l'utilisateur de mon "mini_shell".
Je souhaitrais realiser une fonction qui me renvoit toujours un pointeur de pointeur de caractere pour pouvoir " redecouper " la ligne de commande saisie.
ex : ps -L | wc -L
je souhaiterai que ma fonction me renvoi simplement par exemple : ps -L
Pour cela , j'ai utiliser realloc, mais d'apres les sources d'internet , il est source de nombreux probleme.
Ma fonction ne plante pas a la compilation , mais lors de l'execution celle-ci renvoi une erreur incomprehensible...
Je voudrais savoir ce que vous me conseillez pour la realisation de cette fonction.
Voici ma fonction :
char ** renvoi_cmd( char ** tab , int Recup_Cmd )
{
// pour la comparaison avec l'argument '|'
char pipe[3] = { '|','\0'};
int commande = 0;
char **buf = NULL;
int taille = 0;
int cpt = 0 ;
//Tant que je n'ai pas parcouru tout mon tableau...
while(tab[cpt] != NULL)
{
// si le carractere courant est un pipee...
if(strcmp(tab[cpt],pipe) == 0)
{
commande ++ ;
if(commande == Recup_Cmd)// Si il s'agit de la commande que nous voulons extraire...
{
while(strcmp(tab[cpt],pipe) != 0) // et tant que nous ne rencontrons pas le prochain pipe...
{
char **tmp;
++taille;
tmp = realloc(buf, taille);
if(tmp != NULL)
{
buf = tmp;
// on ajoute l'argument
buf[taille - 1] = tab[cpt];
}
else
{
fprintf(stderr, "error realloc... IN === > " Renvoi_cmd" \n");
exit(42);
}
cpt++;
}
// Ajout du caractere de fin du tableau "NULL"
char **tmp2;
++taille;
tmp2 = realloc(buf, taille);
if(tmp2 != NULL)
{
buf = tmp2;
// on ajoute le caractère
buf[taille - 1] = NULL;
}
else
{
fprintf(stderr, "error realloc... IN === > " Renvoi_cmd" \n");
exit(42);
}
cpt++;
}
}
// Si la commande souhaitée est la premiere...
if(commande == Recup_Cmd)
{
while(strcmp(tab[cpt],pipe) != 0) // IDEM QUE CI-DESSUS
{
char **tmp;
++taille;
tmp = realloc(buf, taille);
if(tmp != NULL)
{
buf = tmp;
/* on ajoute l'argument */
buf[taille - 1] = tab[cpt];
}
else
{
fprintf(stderr, "error realloc... IN === > " Renvoi_cmd" \n");
exit(42);
}
cpt++;
}
buf[taille] = NULL ;
}
cpt++;
}
return buf;
}