Probleme de pointeurs en C? - Programmation
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
Marsh Posté le 26-03-2002 à 17:26:55
Code :
|
[jfdsdjhfuetppo]--Message édité par suri--[/jfdsdjhfuetppo]
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]
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() |
A+
LEGREG
[jfdsdjhfuetppo]--Message édité par legreg--[/jfdsdjhfuetppo]
Marsh Posté le 26-03-2002 à 18:33:43
Merci bcp les gars ca m a bien depanne )
encore merci )
Xc0r
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 :
|
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 + !?
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 ;-)
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
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
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...
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.
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 ! )
Mais + sérieusement, j'la trouve pratique cette fonction moi.
Bon après, c sur, chacun ses gout hein !
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]
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
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
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
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 ! ) |
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
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 :
|
Avec ça, tu parses tt ce que tu veux.
Et (str)tok !
2 coup en 1 !
[jfdsdjhfuetppo]--Message édité par El_Gringo--[/jfdsdjhfuetppo]
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