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 :

memcmp et caracteres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut memcmp et caracteres
    bonjour,

    a l'aide de memcomp, je voudrais tester si un tableau a une certaine valeur. Actuellement, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(memcmp(myTab, "\x01\x02\x03", 3) != 0)
    => comment définir la chaine de comparaison sans avoir le caractère '\0' en fin de chaine (car actuellement, ça me bouffe un caractère pour rien)

    j'ai essayé ça mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(memcmp(myTab, {0x01, 0x02, 0x03}, 3) != 0)
    merci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    pour comparer des chaînes, c'est strcmp

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    => comment définir la chaine de comparaison sans avoir le caractère '\0' en fin de chaine (car actuellement, ça me bouffe un caractère pour rien)
    Par définition, une chaine de caractères se termine par '\0'. Sinon, ce n'est pas une chaine de caractères.
    Comment la fonction est-elle censée savoir quel est le dernier élément d'un tableau si on ne lui précise pas où il se termine ? D'où le '\0' pour terminer les chaînes.

    Si tu veux comparer un tableau de caractères sans t'occuper du '\0' final, AMHA il n'y a pas d'autre solution que de préciser à la fonction le nombre de caractères à tester, soit en codant ta propre fonction soit en utilisant par exemple strncmp. (le n indiquant les n premiers éléments de la 1ere chaine à tester)
    Pour le tableau qui servira à comparer, il suffit de déclarer et d'initialiser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char tableau[] = { 0x01 , 0x02 , 0x03 } ;
    Car si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char tableau[] = "\x01\x02\x03" ;
    le '\0' sera automatiquement rajouté à la fin car il s'agit d'une chaine littérale (et comme dans toute chaine, cela se termine par '\0').

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut
    ma fonction memcmp() à trois paramètres au cas où vous ne l'auriez pas remarqué : et devinez à quoi sert le 3ième paramètres ? ... à définir la taille de la variable

    donc ma question est en fait comment faire pour faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char pattern[3] = { 0x01 , 0x02 , 0x03 } ;
    if(memcmp(myTab, pattern, 3) != 0)
    ... en ne créant pas le tableau pattern (existe t-il en C une écriture qui permet de définir directement les valeurs) ?

    => j'ai essayé de mettre directement mes valeurs sous la même forme que l'initialisation d'un tableau mais ça ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(memcmp(myTab, { 0x01 , 0x02 , 0x03 }, 3) != 0)

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myTab[0] = 0x01 ;
    myTab[1] = 0x02 ;
    myTab[2] = 0x03 ;
    Mais j'avoue avoir du mal à comprendre ce que tu veux faire, si ce n'est re-programmer un memcmp..


    Sinon, tu peux toujours faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcmp ( MyTab, "0x010x020x03", 3 )
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcmp ( MyTab, "\x01\x02\x03", 3 )
    et en déclarant comme char * ton pattern.

    Mais je ne vois pas ton problème avec le "\0", qui est transparent de toutes façons..

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut
    ce que je veux faire c'est juste ne pas utiliser des ressources inutilement (sur un système embarqué c'est toujours utile de gagné de la place, on en manque toujours) et éviter que mon code prenne plusieurs lignes pour rien => je veux juste savoir si on peut simplifier mon exemple (c'est peut-être impossible)

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  3. Réponses: 3
    Dernier message: 12/06/2002, 21h15
  4. Réponses: 2
    Dernier message: 29/05/2002, 20h43
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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