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 :

Fonction de comparaison de chaînes


Sujet :

C

  1. #1
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut Fonction de comparaison de chaînes
    Bonjour
    Alors voilà, j'ai ce 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
     
    int strcasecmp (const char* s1, const char* s2)
    {
        int c1, c2;
        if (s1 == NULL)
            return 1;
        if (s2 == NULL)
            return 1;
        while (*s1 && *s2)
        {
            c1 = isupper ((sdluchar)*s1) ? tolower ((sdluchar)*s1) : *s1;
            c2 = isupper ((sdluchar)*s2) ? tolower ((sdluchar)*s2) : *s2;
            if (c1 != c2)
                return (c1 - c2);
            s1++; s2++;
        }
     
        return (((int)(unsigned char)* s1) - ((int)(unsigned char)* s2));
    }
    Et j'ai ces warnings :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /home/shugo/projets/StrLib/string/stredit.c:476: attention : ne sera jamais exécuté
    /home/shugo/projets/StrLib/string/stredit.c:477: attention : ne sera jamais exécuté
    Les lignes 476 et 477 sont celles-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c1 = isupper ((sdluchar)*s1) ? tolower ((sdluchar)*s1) : *s1;
    c2 = isupper ((sdluchar)*s2) ? tolower ((sdluchar)*s2) : *s2;
    Quelqu'un à une idée ?

  2. #2
    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 : 41
    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
    Salut,

    Quel compilateur et quelle version?

    J'ai gcc 3.4.2 (version mingw) et ceci ne me sort pas ton warning avec les options "-Werror -Wall -W -Wunreachable-code". Note : j'ai supposé que sdluchar etait "unsigned char"

    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
    38
    39
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
     
    typedef unsigned char sdluchar;
     
    int strcasecmp (const char* s1, const char* s2)
    {
        int c1, c2;
        if (s1 == NULL)
            return 1;
        if (s2 == NULL)
            return 1;
        while (*s1 && *s2)
        {
            c1 = isupper ((sdluchar)*s1) ? tolower ((sdluchar)*s1) : *s1;
            c2 = isupper ((sdluchar)*s2) ? tolower ((sdluchar)*s2) : *s2;
            if (c1 != c2)
                return (c1 - c2);
            s1++; s2++;
        }
     
        /*
        if (0)
        {
            printf("coucou\n");
        }
        */
     
        return (((int)(unsigned char)* s1) - ((int)(unsigned char)* s2));
    }
     
     
    int main(void)
    {
        printf("%d\n", strcasecmp("abc", "def"));
        getchar();
        return 0;
    }
    Si j'enleve mon commentaire pour le "coucou", j'ai bien un warning "will never be executed"

  3. #3
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Citation Envoyé par Gruik
    Note : j'ai supposé que sdluchar etait "unsigned char"
    Oui en effet c'est le cas .
    Quel compilateur et quelle version ?
    J'ai gcc (Linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    shugo@MyLinux:~$ gcc -dumpversion 
    4.1.2
    Citation Envoyé par Gruik
    Si j'enleve mon commentaire pour le "coucou", j'ai bien un warning "will never be executed"
    J'avais aussi déduis quelque chose comme ça, c'est bizarre .

Discussions similaires

  1. [BATCH] Fonctions de comparaison de chaînes?
    Par Jahprend dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 29/06/2008, 17h05
  2. Comparaison de chaîne impossible avec la fonction LOWER
    Par Kerod dans le forum Accès aux données
    Réponses: 4
    Dernier message: 24/02/2008, 18h37
  3. find() de std::set avec fonction de comparaison
    Par Biglo dans le forum SL & STL
    Réponses: 3
    Dernier message: 13/01/2006, 08h50
  4. MySQL, et les comparaisons de chaînes en cyrillique, Chinois
    Par SuperCed dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 15/12/2005, 15h24
  5. Réponses: 5
    Dernier message: 15/02/2005, 18h07

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