Créer les fonctions argv et argc.; (en gros) [Résolu]

Signaler
Messages postés
15
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2007
-
Messages postés
15
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2007
-
Bonjour.
J'ai un pb..
je suis un gros debutant en c. mon pb est surement tres con mais bon...

j'ai un string que je dois analyser de la facon suivante:
(le string represente en fait une commande avec ses parametres)
je dois créer un tableau de strings qui contiendra les parametres de la commande
(en fait, faire argv et argc...)

Je bloque completement... j'ai fait un truc comme ca:

void recu_cmd (char *str, char cmd [100][100] )
{
// recuperation de la commande entrée

int i=0;
char buffer[1000];

while (str[i]!=' ')
{
buffer[i]=str[i];
i++;
}

strcpy(cmd[0],buffer);


// recuperation des parametres
int k,j;
k=1;

while (str[i]!=EOF)
{
j=0;
while (str[i]!='|')
{
buffer[j]=str[i];
i++;
j++;
}
strcpy(cmd[k],buffer);
k++;
}
}

ca me met pas d'erreurs mais ca marche pas... :(

Merci d'avance !!!

Fa7
++
(PS: je n'ai pas mis le code dans des balises de code parce que mon navigateur n'a pas voulu me lancer le javascript...)

7 réponses

Messages postés
15
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2007

c'est bon.. j'avais pas fait de malloc.. le truc que tu peux pas inventer comme ca..

ah la la... le C...

merci beaucoup en tout cas !!

++

Fa7
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

salut
je crois que ce qui suit resoudra ton pb

tout a deja ete prevu tu a meme pas a t'embetter
extrait de Le langage de Henri Garreta :
Le langage C permet de dŽefinir des fonctions dont le nombre d'arguments n'est pas fixŽe et peut varier d'un
appel `a un autre.
#include <stdarg.h>
int max(short n, int x1, ...) {
va_list magik;
int x, i, m;
m = x1;
va_start(magik, x1);
for (i = 2; i <= n; i++)
if ((x = va_arg(magik, int)) > m)
m = x;
return m;
}

pdf telechargeable sur developpez.com la page qui traite du pb est la 47
Messages postés
15
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2007

C'est pas exactement ca.
je vais donner un ex de ce que ca doit faire..

recu_cmd("toto para1 para2 para3",comm)

=> comm doit contenir les valeurs suivantes:
toto
para1
para2
para3

voila !!
ca parait pas difficile comme ca..
Mais moi je viens du monde Pascal/ Ada ou tout est tres clair et lisible.; alors j'ai un peu de mal avec le C...
Messages postés
24
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
28 avril 2008
2
salut, si j'ai bien compris ton probleme c'est que tu veux diviser la chaine de caractere mot par mot (argv[i] de 0 à argc) et donner le nombre de mot (argc+1) ???
Messages postés
24
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
28 avril 2008
2
salut, si j'ai bien compris ton probleme c'est que tu veux diviser la chaine de caractere mot par mot (argv[i] de 0 à argc-1) et donner le nombre de mot (argc) ???
Messages postés
24
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
28 avril 2008
2
si ce que tu veux est ce qui est en dessus alors utilise cette procedure :

avant de passer à cette procedure il faut preciser pos qui est la position de l'espace avec la commande
ptr=strrchr(phrase,' ');
"ptr" pointe sur le dernier espase de la variable phrase (ptr et phrase de type char*
alors pos=ptr-phrase+1

il faut alors faire une boucle, ta chaine à diviser est la variable chaine, mot1 sera la chaine sans le dernier mot et mot2 est le
argv[argc-1], jusqu'à arriver à argv[0] à l'aide d'un compteur

void diviser(char *chaine, char *mot1, char *mot2, int pos) {
int j=0;

while (j<pos-1) { /* atteindre le i-1 eme caractère */
*mot1=*chaine; /* copier de 0 à i-1 dans mot1 */
mot1++;
chaine++;
j++ ; }
*mot1='\0';
chaine++; /* ignore le i eme caractère qui l'espace */

while (*chaine) {
*mot2=*chaine; /* copier de i+1 à strlen(chaine) dans mot2 */
mot2++;
chaine++; }
*mot2=' '; /* ajouter une espace à la fin de "mot2" */
mot2++;
*mot2='\0';
}

j'espere que cela t'aidera ;)
Messages postés
15
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2007

ouaip !! c ca que je veux !!
mais qd je le teste, j'ai une erreur "violation d'acces a l'adresse blabla.." sur la ligne

*mot1=*chaine; /* copier de 0 à i-1 dans mot1 */

j'utilise c++builder..

je craque ....

merci en tout cas !!