Probleme de pointeurs en C?

Probleme de pointeurs en C? - Programmation

Marsh Posté le 26-03-2002 à 17:06:22    

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

Reply

Marsh Posté le 26-03-2002 à 17:06:22   

Reply

Marsh Posté le 26-03-2002 à 17:09:29    

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

Reply

Marsh Posté le 26-03-2002 à 17:26:55    

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]


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 26-03-2002 à 17:30:57    

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]

Reply

Marsh Posté le 26-03-2002 à 18:24:57    

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]

Reply

Marsh Posté le 26-03-2002 à 18:33:43    

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

Reply

Marsh Posté le 27-03-2002 à 08:57:55    

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 + !?

Reply

Marsh Posté le 27-03-2002 à 11:25:27    

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 ;-)

Reply

Marsh Posté le 27-03-2002 à 11:37:06    

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

Reply

Marsh Posté le 27-03-2002 à 13:33:34    

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  ;)


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 27-03-2002 à 13:33:34   

Reply

Marsh Posté le 27-03-2002 à 14:26:58    

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

Reply

Marsh Posté le 27-03-2002 à 14:29:07    

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.

Reply

Marsh Posté le 27-03-2002 à 14:34:06    

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 !

Reply

Marsh Posté le 27-03-2002 à 14:41:17    

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]

Reply

Marsh Posté le 27-03-2002 à 14:43:04    

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:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 27-03-2002 à 14:48:40    

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

Reply

Marsh Posté le 27-03-2002 à 14:50:27    

:lol:

Reply

Marsh Posté le 27-03-2002 à 14:59:58    

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

Reply

Marsh Posté le 27-03-2002 à 15:19:07    

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]

Reply

Marsh Posté le 27-03-2002 à 18:10:08    

Ho, allez, je le fais remonter, juste un coup. :D

Reply

Sujets relatifs:

Leave a Replay

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