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

  FORUM HardWare.fr
  Programmation
  C

  Les soucis de "strtok()"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Les soucis de "strtok()"

n°1379246
Sve@r
Posté le 01-06-2006 à 19:12:34  profilanswer
 

J'ai eu un soucis aujourd'hui avec "strtok()".
J'avais fait une fonction qui convertit une chaîne composée de nombres séparés par un caractère (style "10:20:30" ) en structure contenant chaque nombre dans un tableau. J'utilisais donc gaillardement "strtok" et remplissais ma structure dans une boucle. Jusque là, ok
 
J'ai eu ensuite à traiter un fichier contenant sur chaque ligne plusieurs de ces suites de nombres, séparés par une virgule, style "10:20:30,40:50:60". Je prends donc ma ligne, et là, je lance "strtok" pour découper mes suites. Et puis chaque suite je la passe à ma fonction qui, elle aussi, utilise "strtok" pour découper chaque nombre. Et là, gros pb. Les "strtok()" ne peuvent pas s'empiler et j'ai eu n'importe quoi.
 
J'imagine que la fonction doit contenir un pointeur static qui mémorise le dernier emplacement pour repartir du même endroit lors de l'appel suivant. Tant que les appels se suivent séquentiellement, tout va bien. Mais s'il faut les empiler, ça va plus !!!
 
Conclusion: strtok c'est un bel outil, mais il faut être très prudent avec...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 01-06-2006 à 19:12:34  profilanswer
 

n°1379251
Elmoricq
Modérateur
Posté le 01-06-2006 à 19:23:40  profilanswer
 

Je n'aime pas strtok(), en conséquence de quoi j'ai créé dans ma bibliothèque perso une fonction de découpage de chaîne en une liste doublement chaînée de "mots", qui ne modifie pas la chaîne initiale.
 
C'est un peu plus long de traitement (micro-optimisation toussa [:petrus75] ), mais plus souple je trouve, et du coup  ce genre de traitement que tu décris en devient plus simple.

n°1379256
simple_stu​pid
Keep It Simple Stupid
Posté le 01-06-2006 à 19:40:58  profilanswer
 

http://www.linux-kheops.com/doc/ma [...] tok.3.html
 
regarde du côté de strtok_r
 
C'est vrai que c'est tricky, mais c'est le genre de problème qui arrive très souvent quand on n'a pas le courage de lire la doc (et je parle en connaissane de cause ;-)

n°1379321
Sve@r
Posté le 01-06-2006 à 22:23:17  profilanswer
 

simple_stupid a écrit :

http://www.linux-kheops.com/doc/ma [...] tok.3.html
 
regarde du côté de strtok_r
 
C'est vrai que c'est tricky, mais c'est le genre de problème qui arrive très souvent quand on n'a pas le courage de lire la doc (et je parle en connaissane de cause ;-)


 
J'avais vu la doc. Elle parle d'environnement multi thread donc j'avais pas trop percuté, je ne travaille qu'en mono tâche. Mais le pb est répercuté aussi dans l'environnement "empilement de fonctions" et là, si je dois me demander avant d'utiliser "strtok" si je vais pas avoir un pb avec une fonction descendante, ça me fait plus ch...
 
J'ai noté "strtok_r". Il va juste falloir que j'apprenne à l'utiliser  ;)  
 
Je me demande s'il y a d'autres fonctions qui posent des pb de ce style...


Message édité par Sve@r le 01-06-2006 à 22:29:52

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1379505
simple_stu​pid
Keep It Simple Stupid
Posté le 02-06-2006 à 09:40:34  profilanswer
 

Toutes celles qui utilisent un buffer statique.
La seule qui me vient à l'esprit là c'est inet_ntoa()

n°1379812
skelter
Posté le 02-06-2006 à 14:01:18  profilanswer
 

dans la bibliotheque standard il y en a pas mal (tmpnam, asctime, ctime...), toutes sont signalées comme non réentrantes et certaines sont depreciées

n°1380148
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-06-2006 à 18:42:52  profilanswer
 

Sve@r a écrit :

J'ai eu un soucis aujourd'hui avec "strtok()".
<...>
J'imagine que la fonction doit contenir un pointeur static qui mémorise le dernier emplacement pour repartir du même endroit lors de l'appel suivant.


Force 9 sur l'Echelle de Goret.
 
http://mapage.noos.fr/emdel/goret.htm


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1380366
Sve@r
Posté le 03-06-2006 à 11:19:22  profilanswer
 

simple_stupid a écrit :

Toutes celles qui utilisent un buffer statique.
La seule qui me vient à l'esprit là c'est inet_ntoa()


 

skelter a écrit :

dans la bibliotheque standard il y en a pas mal (tmpnam, asctime, ctime...), toutes sont signalées comme non réentrantes et certaines sont depreciées


En fait, il ne suffit pas que la fonction renvoie un buffer statique. getenv() le fait aussi et cela interdit juste de faire un truc de ce style

Code :
  1. char *home;
  2. char *path;
  3. home=getenv("HOME" );
  4. path=getenv("PATH" );
  5. printf("%s, %s\n", home, path);


Bon, je dis "juste" mais c'est déjà pas mal comme restriction. J'imagine le pauvre débutant qui fait ça et qui ne comprend pas pourquoi il obtient 2 fois la même chose, il a de quoi s'arracher les cheveux :sol:  
 
Mais "strtok()" va plus loin. Elle utilise aussi un buffer statique mais elle s'en re sert lors de l'appel suivant. C'est ce genre de fonction dont je me demandais s'il y en avait d'autre...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1380371
simple_stu​pid
Keep It Simple Stupid
Posté le 03-06-2006 à 11:46:55  profilanswer
 

Ok, je croyais que tu voulais dire "dont on ne peut pas interlacer les utilisations".
En fait, on s'en doute un peu avec strtok(), parce qu'elle mémorise la chaîne d'un appel sur l'autre. Je pense que le jour où on utilise une telle fonction, on peut s'en douter.


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

  Les soucis de "strtok()"

 

Sujets relatifs
Soucis sur vbaSoucis avec getimagesize()
[Résolu]Gros soucis avec mysqlsoucis de loadvariables dans mon flash.
Script PhpMyEvents v2.4 j'ai un soucisPetit soucis html et CSS avec Dreamweaver
Passage du HTML au XHTML / CSS, quelque petits soucis...[Résolu] [Script WMI]Petit soucis avec une condition... please help :)
soucis pour la création d'un lien de téléch d'un fichier csvSoucis avec un tableau simple
Plus de sujets relatifs à : Les soucis de "strtok()"


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