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

  FORUM HardWare.fr
  Programmation

  Probleme de pointeurs en C?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de pointeurs en C?

n°117779
xc0r
Posté le 26-03-2002 à 17:06:22  profilanswer
 

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

mood
Publicité
Posté le 26-03-2002 à 17:06:22  profilanswer
 

n°117781
xc0r
Posté le 26-03-2002 à 17:09:29  profilanswer
 

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

n°117791
Suri
Darksurious
Posté le 26-03-2002 à 17:26:55  profilanswer
 

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...
n°117793
El_gringo
Posté le 26-03-2002 à 17:30:57  profilanswer
 

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]

n°117815
LeGreg
Posté le 26-03-2002 à 18:24:57  profilanswer
 

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]

n°117818
xc0r
Posté le 26-03-2002 à 18:33:43  profilanswer
 

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

n°117987
El_gringo
Posté le 27-03-2002 à 08:57:55  profilanswer
 

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

n°118055
Bloodymary​_
Posté le 27-03-2002 à 11:25:27  profilanswer
 

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

n°118063
LeGreg
Posté le 27-03-2002 à 11:37:06  profilanswer
 

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

n°118109
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 27-03-2002 à 13:33:34  profilanswer
 

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
mood
Publicité
Posté le 27-03-2002 à 13:33:34  profilanswer
 

n°118161
El_gringo
Posté le 27-03-2002 à 14:26:58  profilanswer
 

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

n°118163
youdontcar​e
Posté le 27-03-2002 à 14:29:07  profilanswer
 

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.

n°118165
El_gringo
Posté le 27-03-2002 à 14:34:06  profilanswer
 

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 !

n°118172
youdontcar​e
Posté le 27-03-2002 à 14:41:17  profilanswer
 

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]

n°118174
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 27-03-2002 à 14:43:04  profilanswer
 

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
n°118182
LeGreg
Posté le 27-03-2002 à 14:48:40  profilanswer
 

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

n°118183
youdontcar​e
Posté le 27-03-2002 à 14:50:27  profilanswer
 

:lol:

n°118190
LeGreg
Posté le 27-03-2002 à 14:59:58  profilanswer
 

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

n°118213
El_gringo
Posté le 27-03-2002 à 15:19:07  profilanswer
 

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]

n°118344
El_gringo
Posté le 27-03-2002 à 18:10:08  profilanswer
 

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


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

  Probleme de pointeurs en C?

 

Sujets relatifs
[HTML & DHTML] Problème Positionnement[PHP] probleme de sauchettes (socket)
[open gl] problème de compilation d'un programme tout simple ![ commande SQL ] - problème avec UPDATE
probleme d'identtification automatique avec phpbb2Probleme C++ OpenGL/Glut
Probleme avec forum en phpbb 2[PHP] Problème de REG_EMPTY
Problème copie de fichier C/Linux[PHP/Cookies]Probleme a propos d'une incoherence sur les cookies(newbi
Plus de sujets relatifs à : Probleme de pointeurs en C?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR