Fa7
Messages postés15Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention11 septembre 2007
-
7 déc. 2004 à 18:57
Fa7
Messages postés15Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention11 septembre 2007
-
8 déc. 2004 à 08:49
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...)
yserver
Messages postés203Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 8 septembre 2006 7 déc. 2004 à 20:01
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
Fa7
Messages postés15Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention11 septembre 2007 7 déc. 2004 à 20:20
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...
cs_redwings
Messages postés24Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention28 avril 20082 8 déc. 2004 à 01:34
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) ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_redwings
Messages postés24Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention28 avril 20082 8 déc. 2004 à 01:35
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) ???
cs_redwings
Messages postés24Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention28 avril 20082 8 déc. 2004 à 01:44
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';
}