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 :

strchr qui ne fonctionne pas!


Sujet :

C

  1. #1
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut strchr qui ne fonctionne pas!
    Bonjour, j'ai une fonction qui doit memoriser des balises Html, c'est a dire des lettres contenues entre < et >
    ou entre < et ' ' (l'espace c'est au cas où il y aurait des proprietés a la balise). Enfin bref voila ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char *Memoriser_Balise(char *ligne, int alpha)
    {
    	char *balise=malloc(15);
    	char *finnom;
    	finnom =strchr(&ligne[alpha],' ');
    	if (!finnom) 
    	finnom = strchr(&ligne[alpha],'>');
    	*finnom='\0';
    	strncpy(balise,ligne+alpha, 15);
    	*finnom='>';
    	return(balise);
    }
    Or si j'ai par exemple <HTML><Body> la balise memorisée sera : HTML><Body
    Pareil si j'ai <i>espaceBlabla , la balise memorisée sera : i>

    Quelqu'un peut il m'expliquer pourquoi?

    Surtout que si j'ai <i>retour chariot la balise memorisée sera : i
    Ce qui est correct.

  2. #2
    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 Re: strchr qui ne fonctionne pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	finnom =strchr(&ligne[alpha],' ');
    Tu passes a strchr l'adresse d'un caractere alors que strchr demande une chaine de caractere (c'est quand meme mieux pour rechercher un caractere dans une chaine)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	finnom = strchr(&ligne[alpha],'>');
    Pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	strncpy(balise,ligne+alpha, 15);
    Comprend pas pourquoi tu fais ca

    Regarde peut etre du cote de strtok
    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]

  3. #3
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Differentes remarques:
    - ton if (!finnom) cherche le > si tu n'as pas trouve d'espace. Donc si t'as un espace vers la fin, tu ne trouveras pas ton > qui est juste a cote.
    - tu mets > a la place de ton char trouve or si tu trouve un espace tu mets un > en trop

    Sinon en testant ca marche pour moi:
    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
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
     
    char *Memoriser_Balise(char *ligne, int alpha)
    {
       char *balise=malloc(15);
       char *finnom;
       finnom =strchr(&ligne[alpha],' ');
       if (!finnom)
       finnom = strchr(&ligne[alpha],'>');
       *finnom='\0';
       strncpy(balise,ligne+alpha, 15);
       *finnom='>';
       return(balise);
    }
     
    int main(void)
    {
        char *astring=strdup("<HTML><Body>");
        char *balise=Memoriser_Balise(astring,0);
        printf("String:%s\nBalise:%s\n",astring,balise);
        return 0;
    }
    Citation Envoyé par ./BFH
    String:<HTML><Body>
    Balise:<HTML
    Remarques:
    - [Skyrunner] pour l'appel strchr c'est correct, l'addresse d'un caractere (un char *) est bien une chaine de caractere.
    - fais attention d'avoir le droit de modifier ligne, perso je prefere un const char * et je ferais le strncpy avec le nombre de caracteres a copier (genre strncpy(balise, ligne+alpha, finnom-ligne+alpha)
    - pour ton probleme, tu donne bien le bon alpha (je pense que tu dois mettre 1 au lieu de 0 pour le <i>, et pour le HTML/Body je sais pas trop, mais regarde de ce cote.

  4. #4
    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 D[r
    eadLock]

    - [Skyrunner] pour l'appel strchr c'est correct, l'addresse d'un caractere (un char *) est bien une chaine de caractere.
    Exact je n'ai rien dis
    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]

  5. #5
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    En fait pour le <HTML><Body> tout vient de ton algo, et je pense que tu dois avoir un espace apres le Body> donc il s'arrette a l'espace.
    Tu devrais chercher dans l'autre sens:
    - chercher un > (la fin de la balise)
    - si tu as trouver, alors cherche un espace (pour les proprietes a l'interieur de ta balise)
    Tu n'as qu'a inverser tes deux tests (' ' vs '>'), inverser ton test (if (finnom1=NULL)), ajouter un cas d'erreur quand meme (si tu ne trouve pas de >) et ca devrait marcher

    Rq: pour le +1, je crois que je comprends, c'est pour enlever le <, donc c'est bon.

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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