Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2370 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°100761
paranoidan​droid
Posté le 15-02-2002 à 12:08:16  profilanswer
 

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]

mood
Publicité
Posté le 15-02-2002 à 12:08:16  profilanswer
 

n°100774
gilou
Modérateur
Modosaurus Rex
Posté le 15-02-2002 à 12:43:37  profilanswer
 

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. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°100777
gilou
Modérateur
Modosaurus Rex
Posté le 15-02-2002 à 12:46:45  profilanswer
 

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. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°100852
karlkox
Posté le 15-02-2002 à 14:03:16  profilanswer
 

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

n°100879
paranoidan​droid
Posté le 15-02-2002 à 14:37:46  profilanswer
 

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 ..

n°100924
Rawhead re​x
Argghhhhh
Posté le 15-02-2002 à 15:15:02  profilanswer
 

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 !

n°100972
paranoidan​droid
Posté le 15-02-2002 à 16:06:27  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
Plus de sujets relatifs à : [ C ] strtok ... comment qu'on fait ça ...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)