[ C ] strtok ... comment qu'on fait ça ...

strtok ... comment qu'on fait ça ... [ C ] - Programmation

Marsh Posté le 15-02-2002 à 12:08:16    

Bonjour tout le monde ...
 
Je bloque sur une fonction en C : strtok
chuis pas très doué en C en ce qui concerne les chaine de caracteres et les pointeurs
 
voilà un bout :
 
char *chaine = "grep -i -l -d / *.* >> result.txt";
char *separateur = "/";
char *cmd[2];
 
cmd = strtok ( chaine, separateur );
 
Voilà je que j'obtiens en débuggant .. ( pas de warning ni d'erreur a la compil )
je demandais pas vraimeent ça :
 
cmd[0] = "grep -i -l -d "
cmd[2] = "grep -i -l -d "
et il me détruit au ssi le "chaine"
chaine = "grep -i -l -d "     :ouch:  
cmd[1] = ""
 
il me fait une "Exception" en débuggant lorsqu'il fait strlen(cmd[1]);
 
Comment je peux récuperer ce qu'il y a après le "/" dans chaine : " *.* >> result.txt"   :wahoo:
 
 
Je fais cela dans le but de pouvoir insérer une variable à l'intérieur de chaine ensuite à l'aide de strcat.
 
:(
 
Merci

 

[jfdsdjhfuetppo]--Message édité par paranoidandroid--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 15-02-2002 à 12:08:16   

Reply

Marsh Posté le 15-02-2002 à 12:43:37    

cmd[0] = strtok ( chaine, separateur );  
cmd[1] = strtok ( NULL, "" );  
 
Mais il faut que tu comprennes que strtok insere des zeros dans ta chaine initiale.  
Donc si tu veux la reconstituer, il faudra concatener tes cmd[0], "/" et cmd[1].
 
"grep -i -l -d / *.* >> result.txt"
|
chaine avant l'appel a strtok.
 
appel a strtok(chaine, "/" );
"grep -i -l -d \0 *.* >> result.txt"
|
chaine apres l'appel a strtok. le separateur est remplace par \0.
strtok memorise la position juste apres ce \0.
Si tu rapelles strtok avec comme premier parametre NULL, il va en fait demarrer de cette position memorisee.
Si de plus, tu passe en seconde chaine une chaine vide, il va aller jusqu'au bout de la chaine:
appel a strtok(NULL, "" );
" *.* >> result.txt"
|
demarre ici, et va jusqu'au bout puisqu'il y a pas de separateur a trouver...
 
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Marsh Posté le 15-02-2002 à 12:46:45    

Tu peux aussi proceder ainsi:
strtok(chaine, separateur);  
len = strlen(chaine)+1;  
cmd[0] = chaine;  
cmd[1] = chaine+len;
A+,

 

[jfdsdjhfuetppo]--Message édité par gilou--[/jfdsdjhfuetppo]


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Marsh Posté le 15-02-2002 à 14:03:16    

Merde, trop tard, ze voulé lui dire pour le coup du NULL ;)

Reply

Marsh Posté le 15-02-2002 à 14:37:46    

Ben merci ... ça m'a franchement aidé ..
 
maintenant que j'ai mes boutes éparpillés .. j'arrive pas à les recoller ensemble ...
 
j'ai admettons
cmd[0] = "grep -i -l -d "
cmd[1] = " *.* >> result.txt"
et aussi ma ptite variable x que je veux coller entre ..
 
j'aimerais avoir chaine = "grep -i -l -d x *.* >> result.txt"
 
Mais j'y arrive paaaaas :cry: je pète un plomb.
 
quand je fais :
 
strcpy(strcpy(cmd[0]+dbt,x)+dbt+var,cmd[1]); avec dbt=strlen(cmd[0]) et var=strlen(x)
 
j'obtiens n'importe quoi ... un truc du genre "grep -i -l -d xx"
 
pffffffff
 
Merci pour vos réponses ..

Reply

Marsh Posté le 15-02-2002 à 15:15:02    

La y a belle tentative !
Moi j'utilise plutot sprintf quand je veux concatener des chaines de caracteres ou je veux inserer des petites choses :
 
cmd[0] = "grep -i -l -d "  
cmd[1] = " *.* >> result.txt"  
 
char *result ;  
 
result=malloc((strlen(cmd[0])+strlen(cmd[1])+2)*sizeof(char)) ;
sprintf(result,"%s %i %s", cmd[0],x,cmd[1]) ;
 
Et hop !

Reply

Marsh Posté le 15-02-2002 à 16:06:27    

nom de diou !!
 
j'ai rêvé d'une fonction telle que sprintf ...
rex l'a faite
 
Thanks man..
 
merci pour votre aide ..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed