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

 


Dernière réponse
Sujet : Probleme de pointeurs en C?
El_gringo Ho, allez, je le fais remonter, juste un coup. :D

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
El_gringo Ho, allez, je le fais remonter, juste un coup. :D
El_gringo

legreg a écrit a écrit :

 
personne n'a rien contre toi (quoique parfois.. je me demande)




 
hé ho... t'emballe pas qd même !
 

legreg a écrit a écrit :

 
Exemple si tu as du mal a voir le pb: tu veux parser
toto, tata; titi; tete,tutu
ce qui n'a rien d'extravagant
 
la l'utilisation de strtok est bloquant
parce que tu ne peux pas imbriquer
des appels a strtok sur ';' et sur ','.




 
g pas de mal à voir le pb. Je comprend très bien que c pas utilisable dans TOUS les cas cette fonction. n'empêche que dans certain cas, elle est pratique. La preuve:

Code :
  1. char  szSeparators[]=",;";
  2. char  str[]="tata, titi; toto; tutu, et autres";
  3. char* pszTrouve = strtok (str, szSeparators);
  4. while (pTrouve != NULL)
  5. {
  6.   // Là tu fais ce que tu veux. pszTrouve pointe sur la chaine à trouver  
  7.   pszTrouve = strtok (NULL, strDelimit);
  8. }


 
Avec ça, tu parses tt ce que tu veux.
Et (str)tok !  :D
2 coup en 1 !

 

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

LeGreg

El_Gringo a écrit a écrit :

 
J'vois pas ce que vs avez tous contre cette fonction (ou alors c contre moi !? bouuuuh, personne ne m'aime ! :cry: )



 
personne n'a rien contre toi (quoique parfois.. je me demande)
ni contre ton code. Je me permettais
juste de faire une remarque (j'espere) "constructive"
sur le fait que strtok n'est pas a utiliser partout
parce que le fait qu'elle ne soit pas reentrante est un defaut
assez majeur.
 
Exemple si tu as du mal a voir le pb: tu veux parser
toto, tata; titi; tete,tutu
ce qui n'a rien d'extravagant
 
la l'utilisation de strtok est bloquant
parce que tu ne peux pas imbriquer
des appels a strtok sur ';' et sur ','.
 
Autre exemple: tu as un bout de code qui utilise strtok
marquee en rouge "non reentrante".
malheureusement ta source est reutilise presque telle quelle
dans une application multithreadee.. L'utilisation de strtok la rend non threadsafe.  
 
A+
LEGREG

youdontcare :lol:
LeGreg

youdontcare a écrit a écrit :

non, c'est 'contre' la fonction. je vois pas l'intérêt de surcharger la lib alors qu'une autre fonction fait quasiment la même chose.



 
ca doit etre pour ne pas trop vexer ceux qui aiment
strtok ;)
 
A+
LEGREG

juju_le_barbare

El_Gringo a écrit a écrit :

 
 
ha... j'crois que j'me suis fait un enemi.
Enemi d'un barbare en plus. Je n'dois plus avoir très longtemps à vivre...  




 
 
mais non mon petit gringo, je t'aime bien  :D  
 
non sérieusement j'aime pas avoir d'ennemis, je remarque seulement que tu n'est pas d'une sympathie extreme, mais on est comme on est, non ?
 
Bon je te laisse, je dois faire des recherches sur ce que tu sais  :D  
 
 :na:  :na:  :na:

youdontcare non, c'est 'contre' la fonction. je vois pas l'intérêt de surcharger la lib alors qu'une autre fonction fait quasiment la même chose.
 
ton exemple :
 
char  szSeparator[]=",";  
 
char* pszTrouve = strtok (str, szSeparator);  
while (pTrouve != NULL)  
{  
  // Là tu fais ce que tu veux. pszTrouve pointe sur la chaine à trouver  
  pszTrouve = strtok (NULL, strDelimit);  
}  
 
avec strchr (ou strstr ) :
 
char  szSeparator =',';  
 
char* pszTrouve = strchr(str, szSeparator);  
while (pszTrouve != NULL)  
{  
  // Là tu fais ce que tu veux. pszTrouve pointe sur la chaine à trouver  
  pszTrouve = strchr(pszTrouve, szSeparator);  
}

 

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

El_gringo

youdontcare a écrit a écrit :

strstr(), qui est je trouve bien plus pratique. ou strchr pour ne rechercher qu'un caractère.
 
une fois qu'on trouve une occurence, on passe le pointeur pour rechercher dans la sous-chaîne :
 
char* str = "toto,tata,titi";
char* search = strchr(str, ',');
char* search = strchr(search, ',');
...
etc.  




 
Maieuuuh, j'la trouve très bien cette fonction strtok, y a qu'a regardé le bout de code que g mis, j'pense qu'y marche très bien (pas essayé), il est simple.
J'vois pas ce que vs avez tous contre cette fonction (ou alors c contre moi !? bouuuuh, personne ne m'aime ! :cry: )
Mais + sérieusement, j'la trouve pratique cette fonction moi.
Bon après, c sur, chacun ses gout hein !

youdontcare

legreg a écrit a écrit :

Il doit exister une version reentrante de la meme fonction


strstr(), qui est je trouve bien plus pratique. ou strchr pour ne rechercher qu'un caractère.
 
une fois qu'on trouve une occurence, on passe le pointeur pour rechercher dans la sous-chaîne :
 
char* str = "toto,tata,titi";
char* search = strchr(str, ',');
char* search = strchr(search, ',');
...
etc.

El_gringo

juju_le_barbare a écrit a écrit :

 
 
t'en fais pas legreg on est avec toi  ;)  




 
ha... j'crois que j'me suis fait un enemi.
Enemi d'un barbare en plus. Je n'dois plus avoir très longtemps à vivre...

juju_le_barbare

legreg a écrit a écrit :

 
 
que ca ne te serve pas a TOI c'est une chose
 
mais il y a des cas, ou ca t'evitera
de te creuser la tete de savoir qu'il y
a une version reentrante de la fonction.
Je n'ai pas a me justifier (un comble quand je viens aider
les gens!), l'existence de cette fonction dans la lib y suffit.
 
LEGREG  




 
t'en fais pas legreg on est avec toi  ;)

LeGreg

El_Gringo a écrit a écrit :

 
Mais qu'es ce que tu dis toi !? on s'en tape !
L'algo que g donné marche. Qu'es ce que tu vas chercher de + !?  




 
que ca ne te serve pas a TOI c'est une chose
 
mais il y a des cas, ou ca t'evitera
de te creuser la tete de savoir qu'il y
a une version reentrante de la fonction.
Je n'ai pas a me justifier (un comble quand je viens aider
les gens!), l'existence de cette fonction dans la lib y suffit.
 
LEGREG

Bloodymary_ Je serai moins virulent dans ma reponse mais il me semble que le but est atteint
 
un premier appel sert "d'init" et ensuite la boucle d appel permet de recup les occurences recherchees
 
cela marche parfaitement comme ca et je ne vois pas ou est le probleme
 
ou alors j ai rate une marche ;-)
El_gringo

legreg a écrit a écrit :

 
 
attention tout de meme strtok n'est pas reentrante
(deux appels successifs avec les memes arguments
donnent des resultats differents)
Il doit exister une version reentrante de la meme fonction
 
au hasard :

Citation :

strtok_r()
The strtok_r() function has the same functionality as strtok() except that a pointer to a string placeholder lasts must be supplied by the caller. The lasts pointer is to keep track of the next substring in which to search for the next token.


A+
LEGREG  
 
 




 
Mais qu'es ce que tu dis toi !? on s'en tape !
L'algo que g donné marche. Qu'es ce que tu vas chercher de + !?

xc0r Merci bcp les gars ca m a bien depanne :))
 
 
encore merci :))
 
Xc0r
LeGreg

El_Gringo a écrit a écrit :

Toi, tu m'as l'air d'un gars qui connait pas la fonction strtok...
char  szSeparator[]=",";
char* pszTrouve = strtok (str, szSeparator);
while (pTrouve != NULL)
{
   // Là tu fais ce que tu veux. pszTrouve pointe sur la chaine à trouver
   pszTrouve = strtok (NULL, strDelimit);
}
 
Tu te feras vachement moins chier comme ça. 'faut inclure string.h, c tout.  




 
attention tout de meme strtok n'est pas reentrante
(deux appels successifs avec les memes arguments
donnent des resultats differents)
Il doit exister une version reentrante de la meme fonction
 
au hasard :

Citation :

strtok_r()
The strtok_r() function has the same functionality as strtok() except that a pointer to a string placeholder lasts must be supplied by the caller. The lasts pointer is to keep track of the next substring in which to search for the next token.


A+
LEGREG

 

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

El_gringo Toi, tu m'as l'air d'un gars qui connait pas la fonction strtok...
 
 
char  szSeparator[]=",";
 
char* pszTrouve = strtok (str, szSeparator);
while (pTrouve != NULL)
{
   // Là tu fais ce que tu veux. pszTrouve pointe sur la chaine à trouver
   pszTrouve = strtok (NULL, strDelimit);
}
 
Tu te feras vachement moins chier comme ça. 'faut inclure string.h, c tout.

 

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

Suri

Code :
  1. char *debut_str(char *str)
  2. {
  3.    while (*str && *str == ',' && *str == ' ')
  4.       str++; 
  5.    return (str);
  6. }
  7. char *fin_str(char *str)
  8. {
  9.    while (*str && *str != ',' && *str != ' ')
  10.       str++; 
  11.    return (str);
  12. }
  13. et ds le main:
  14. char *s;
  15. char *fin;
  16. char *toto;
  17. for (s = debut_str(ma_string_a_decouper); *s; )
  18. {
  19.     fin = fin_str(s);
  20.     toto = my_strndup(s, fin - s);   //c un strdup qui copie fin-s caracteres...
  21.     push(list, toto); 
  22.     s = debut_str(s);
  23. }

 

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

xc0r oui .... en fait non :))
plutot je voudrais pusher toto, tata et titi dans une liste !
(j ai ma fonction push(char *str) qu est prete elle :) )
 
re Xc0r
xc0r Bonsoir, j ai un tit probleme de pointeur un peu con je sais mais la je commence a fatiguer et a m embrouiller.
 
voila j ai str="toto,tata,titi"
et je veux separer toto tata et titi et les mettre ....ailleurs !:)
mais je m embrouille avec mes pointeurs la
 
char **str_a_sauver;
for(;*str != ',';str++)
{
 
}
 
en fait voila je voudrait separer ma str avec le separateur virgule quoi ?!
 
merci pour votre aide ! ;p
 
Xc0r

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