IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

usage strcat et strtok


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Points : 27
    Points
    27
    Par défaut usage strcat et strtok
    J'ai ecrit une fonction qui recupere une ligne et separe les valeurs numeriques des lettres en dectectant certain separateurs mais ca ne marche pas et je ne trouve pas pourquoi voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    void traitement_ligne (char* chaine,
    char* ligne,
    long double valeurs[])
    {
    char seps[] = ": = , A V W ";
    char *token;
    char temp[BUFFSIZE];
    int i=0;
    int ret=0;
    token = strtok( ligne, seps );
     
    while( token != NULL ) {
    ret = sscanf (token, "%[0-9-]s",temp);
     
    if (ret==1) { 
    valeurs[i] = strtod (token, NULL);
    i++; 
    }
    else{
    strcat(chaine, temp);
    }
    token = strtok( NULL, seps );
    }
    valeurs[i]=0;
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    N'ayant plus ma boule de cristal, je ne vois pas pourquoi cette fonction ne fonctionnne pas : donne des exemples de ce qui ne va pas : données résultats azttendus, résultats obtenus.
    A noter que cette fonction est potentiellement dangereuse car aucun test n'est fait sur la taille du tableau valeur.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Trap D
    N'ayant plus ma boule de cristal, je ne vois pas pourquoi cette fonction ne fonctionnne pas : donne des exemples de ce qui ne va pas : données résultats azttendus, résultats obtenus.
    A noter que cette fonction est potentiellement dangereuse car aucun test n'est fait sur la taille du tableau valeur.

    Ouhouhou

    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Skyrunner
    Ouhouhou

    merci
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Points : 27
    Points
    27
    Par défaut
    Vous êtes vraiment Intransigeant avec les debutant
    Peut tu m'en dire plus sur :

    A noter que cette fonction est potentiellement dangereuse car aucun test n'est fait sur la taille du tableau valeur

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Ce qu'ils veulent dire (si tu n'as toujours pas compris), c'est qu'il faut joindre tout ton code, ils ne sont pas devins..

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Nalido
    Vous êtes vraiment Intransigeant avec les debutant
    En quoi est-ce que:

    donne des exemples de ce qui ne va pas : données résultats azttendus, résultats obtenus.
    est être intransigeant?

    Par contre, je dirais qu'en plus strtok est aussi déconseillé. Il faudrait voir le code qui appelle cette fonction et un exemple qui montre ce que tu donnes, ce que tu obtiens et ce que tu souhaiterais...

    Jc

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Points : 27
    Points
    27
    Par défaut
    Voici le code transformé en fonction main. j'ai deux chaines de caractères un vide que je vais remplir par concatenation successive et une que je veut "filtrer".

    Donc je recois la chaine appelée ligne, j'utilise strtok sscanf pour séparer les valeur numeriques du reste. Si la valeur recuperée dans token est un nombre je range dans tableau sinon je concatene dans la chaine appelée chaine (au depart vide).

    J'espere avoir été plus clair ce coup çi.

    Ce qui ne marche pas c'est qu'il met un message d'erreur la memore ne etre read
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h> 
    #include <string.h>
    #include <stdlib.h> 
    #define BUFFSIZE 256
    void main ()
    {
       char seps[]   = ": = , A V W ";
       char *token;
            char temp[BUFFSIZE];
            int i=0;
            int ret=0;
     
         char *chaine='\0';
         char ligne[] = "DOWN=3.6791358e-009V.";
         long double valeurs[5];
     
       token = strtok( ligne, seps );
            while( token != NULL ) 
       {
          ret = sscanf (token, "%[0-9-]s",temp);
     
                   if (ret==1) 
          {   
                          valeurs[i] = strtod (token, NULL);
                 i++;   
             }
             else
          {
                 strcat(chaine, temp);
             }
             token = strtok( NULL, seps );
         }
         valeurs[i]=0;
    }

  9. #9
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut


    OMFG !

    Non, je suis mechant.
    J'ai juste mis en avant 2 points qui me choquent, à toi de trouver ce qui ne va pas

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Points : 27
    Points
    27
    Par défaut
    j'y suis presque la memoire ne peut etre written mais il affiche quand meme les element concaténé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <stdio.h> 
    #include <string.h>
    #include <stdlib.h> 
    #define BUFFSIZE 256
    void main ()
    {
       char seps[]   = ": = , A V W ";
            char *token;
            char temp[BUFFSIZE];
            int i=0;
            int ret=0;
     
         char chaine[BUFFSIZE];
         char ligne[] = "DOWN=3.6791358e-009VJECROITQUECEST,5e-6.";
       long double valeurs[10];
     
       token = strtok( ligne, seps );
            while( token != NULL ) 
       {
                   ret = sscanf (token, "%[0-9-]s",temp);
     
                   if (ret==1) 
          {   
                          valeurs[i] = strtod (token, NULL);
                 i++;   
             }
             else
          {
                 strcat(chaine, token );
                 printf("%s",token);
             }
            token = strtok( NULL, seps );
         }
         valeurs[i]=0;
         chaine[0]='\0';
    }

  11. #11
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Hm, tu fournis ": = , A V W " comme séparateur, sauf que ce n'est pas une liste qu'il faut donner mais UN séparateur (une chaine séparatrice, je veux dire)

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Points : 27
    Points
    27
    Par défaut
    Non, ce n'est pas cela le probleme car il detecte bien les separateur et decoupe la chaine correctement c'est le stcokage et la concatenation qui sont problématique

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Points : 27
    Points
    27
    Par défaut
    merci mais jai abouti a une solution

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Donne la solution sinon ça n'a aucune utilité et ça peut servir aux autres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel usage faites vous de Python (2004 - 2008) ?
    Par Guigui_ dans le forum Général Python
    Réponses: 130
    Dernier message: 03/12/2008, 23h59
  2. [POI] Usage à partir d'une Servlet
    Par fredmorvant29 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 19/07/2004, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo