Langage C - Strcmp
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Langage C - Strcmp



  1. #1
    joseph20480

    Langage C - Strcmp


    ------

    Bonjour,

    Je bute sur une question en C.
    L'erreur va surement vous paraitre évidente, mais je ne vois plus clair faute de m'énerver et surement d'un manque de base.

    Toujours est il que...
    > Je développe sur STM32 en C ( STM32 cube IDE).
    > Je cherche a décoder une trame reçue (UART) par le STM, envoyé par le PC
    > Ma trame, de longueur variable, contient caractère début et fin de trame.
    > Ma trame est de type Commande AT.

    <STX>C_SPEED!1234<ETX> ou <STX>C_SPEED?<ETX>
    <STX>C_DISTANCE!1234<ETX> ou <STX>C_DISTANCE?<ETX>

    Mon firmware reçoit correctement la trame, et en en mesure de définir le type de commande (! ou ?). Ici je cherche a comparer ma commande reçue.
    Ma commande est enregistrer sous le format : Char data[10]={0} ou
    data[0] = C
    data[1] = _
    data[2] = S
    data[3] = P
    data[4] = E
    data[5] = E
    data[6] = D

    Une commande du type strcmp() me parait intéressante.
    genre strcmp(data,"C_SPEED)==0 si identique.

    hors rien a faire... je pense que le problème vient de mon tableau sans le caractère '/0'.
    Un avis ?

    -----

  2. #2
    polo974

    Re : Language C - Strcmp

    strncmp est ton ami.

    https://cplusplus.com/reference/cstring/strncmp/

    C'est comme l'autre, avec une longueur max en plus...

    Très pratique quand il n'y a pas de \0 au bout (du morceau) de la chaine (ou des 2 d'ailleurs) que tu veux comparer.

    Perso, je mettrais quand même le \0 au bout de la constante (en plus, plus simple à déclarer).
    Jusqu'ici tout va bien...

  3. #3
    Bounoume

    Re : Language C - Strcmp

    utilisant strcmp, les chaînes de caractères doivent se terminer par \0 : sinon la fonction ne sait pas quand arrêter la lecture des chaînes ,
    et alors si data[9] != \0 ça va planter....

    par contre avec strncmp, comme a conseillé polo, ça s'arrêtera forcément quand ça aura scanné au max size_t caractères...... même sans caractère d'arrêt......
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  4. #4
    pm42

    Re : Langage C - Strcmp

    Citation Envoyé par polo974 Voir le message
    Perso, je mettrais quand même le \0 au bout de la constante (en plus, plus simple à déclarer).
    Oui, à part vouloir gratter un octet qu'on va perdre de toute manière dans le code lors de l'appel à strncmp plutôt que strncmp, faire
    Code:
    char *data="C_SPEEED"
    n'a que des avantages.
    Dernière modification par JPL ; 29/10/2023 à 23h10. Motif: Correction du titre

  5. A voir en vidéo sur Futura
  6. #5
    polo974

    Re : Langage C - Strcmp

    le strncmp a l'avantage de pouvoir comparer le début d'une longue chaîne (le message) avec le mot clé recherché.

    sinon, s'il y a beaucoup de mots clés, une recherche dichotomique est plus performante (ah... mes vieux souvenir de lex et yacc , un truc à mi-chemin entre pur délice et cruelle torture...).
    Jusqu'ici tout va bien...

  7. #6
    pm42

    Re : Langage C - Strcmp

    Citation Envoyé par polo974 Voir le message
    sinon, s'il y a beaucoup de mots clés, une recherche dichotomique est plus performante
    Et surtout un tableau associatif mais en C, il faut trouver le bout de code qui le fait.

    Citation Envoyé par polo974 Voir le message
    (ah... mes vieux souvenir de lex et yacc , un truc à mi-chemin entre pur délice et cruelle torture...).
    Oui. On a fait mieux depuis et là, on parle encore de tout autre chose.

  8. #7
    albanxiii
    Modérateur

    Re : Language C - Strcmp

    Citation Envoyé par Bounoume Voir le message
    par contre avec strncmp, comme a conseillé polo, ça s'arrêtera forcément quand ça aura scanné au max size_t caractères...... même sans caractère d'arrêt......
    Quand tu sais pas lire le prototype d'une fonction !

    Code:
    int strncmp ( const char * str1, const char * str2, size_t num );
    (parfois mieux vaut ne rien poster, surtout si on n'apporte rien de plus que ce qui a déjà été (mieux) dit).
    Not only is it not right, it's not even wrong!

Discussions similaires

  1. Question sur un équivalent entre le langage Julia et le langage R.
    Par informatiquejuliaR dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 31/05/2023, 10h12
  2. [Génétique] le langage génétique expliqué en langage humain est ce possible?
    Par ramzus2 dans le forum Biologie
    Réponses: 3
    Dernier message: 20/11/2018, 16h21
  3. Differences entre le langage C et le langage Arduino
    Par Batpillou dans le forum Électronique
    Réponses: 7
    Dernier message: 19/03/2015, 21h44