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 :

Comportement de strcmp


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut Comportement de strcmp
    Bonjour à tous,

    Je n'arrive pas à comprendre pourquoi ce test est toujours faux... la fonction strcmp n'est elle pas sensé comparer seulement les n (4 dans mon exemple) premiers caractères ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(strcmp("help", "help0", 4) == 0)
    {
                printHelp();
                return;
    }
    Je suis sous Ubuntu et j'utilise gcc 4.4.3

    Merci d'avance pour vos réponses

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

    Il faut utiliser strncmp et non strcmp. Le compilateur génère des warning s'il est bien réglé.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp("help", "help0", 4) == 0)
    Cela n'aurait jamais du passer avec un compilateur bien réglé.

    La page man de strcmp indique clairement que strcmp attend 2 paramètres et pas 3 comme tu l'as fait.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Ton compilateur ne t'a pas craché tout son venin à la figure? Impressionnant! Sinon la fonction que tu recherche est strncmp().

  5. #5
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp("help", "help0", 4) == 0)
    Cela n'aurait jamais du passer avec un compilateur bien réglé.
    Si le compilateur fait une déclaration implicite parce qu'on a oublié d'inclure string.h, alors l'erreur peut être masquée (c'est indépendant des réglages du compilateur me semble-t-il).

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par uknow Voir le message
    Si le compilateur fait une déclaration implicite parce qu'on a oublié d'inclure string.h, alors l'erreur peut être masquée (c'est indépendant des réglages du compilateur me semble-t-il).
    Avec les bons réglages, le compilateur émet au moins un warning "unknown function strcmp()"
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Avec les bons réglages, le compilateur émet au moins un warning "unknown function strcmp()"
    Oui, mais on n'obtient ce type d'erreur que si on "inhibe" les déclarations implicites (chose qui ne me semble pas être faisable par utilisation des options de compilation, je me trompe ?!), ou si le compilateur est assez intelligent pour savoir qu'il s'agit de la fonction dont la déclaration est dans string.h que nous n'avons pas inclus.

    GCC retourne un message d'erreur "en bonus" sur une mauvaise utilisation des fonctions standards même sans qu'on ait inclut les "headers" associés, donc le problème est réglé. Mais je suppose que tous les compilateurs ne sont pas pareils à ce niveau.

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par uknow Voir le message
    Oui, mais on n'obtient ce type d'erreur que si on "inhibe" les déclarations implicites (chose qui ne me semble pas être faisable par utilisation des options de compilation, je me trompe ?!), ou si le compilateur est assez intelligent pour savoir qu'il s'agit de la fonction dont la déclaration est dans string.h que nous n'avons pas inclus.
    Non.

    Par exemple, gcc (mais cela est vrai pour d'autre compilateurs) correctement réglé remonte bien un warning du type de celui indiqué par ram-000 sans pour autant inhiber la déclaration implicite (le code compile) même sur des fonctions personnelles :

    C:\data\Workspace\C\DVP\main.c|6|warning: implicit declaration of function 'test'|

Discussions similaires

  1. open avec comport
    Par Goldocrack dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/04/2009, 08h12
  2. [Free Pascal] Comportement de Exec
    Par néo333 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 01/11/2003, 17h46
  3. Utilisation de strcmp!
    Par fmv12 dans le forum C
    Réponses: 10
    Dernier message: 30/10/2003, 12h22
  4. Réponses: 2
    Dernier message: 22/09/2003, 11h23
  5. caractère générique utilisable dans strcmp
    Par barthelv dans le forum C
    Réponses: 9
    Dernier message: 01/08/2003, 16h54

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