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 :

probleme test condition


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut probleme test condition
    bonsoir

    je liste le contenu d'un dossier avec un filtre d'extension de fichier

    pas de probleme avec la liste de fichier mais sur le test de conditon ne fonctionne pas ?

    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
     
    DIR * dirdossier;
    dirdossier opendir(/mon_dossier/)
    if (dirdossier != NULL)
    {
       struct dirent *nomfichier;
       while
       {
          char *exten;
          char *refexten = "ses"; // l'extension de fichier.
          exten = strstr(nomfichier->d_name, "ses");
          if (exten == refexten) // le probleme vient de la, mais pourquoi ?????
          {
              affiche dans un textview : nomfichier->name;
          }
       }
    }
    merci d'avance pour votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 030
    Billets dans le blog
    136
    Par défaut
    Bonjour,

    Si vous voulez comparé deux chaines de caractères, il faut utiliser strcmp().
    Cela ne marchera pas en utilisant '==' car il va comparé juste la valeur des pointeurs.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut
    le probleme c'est le -1 ,0 ou 1 et avec g_string_equal c'est GString qui me donne des warming a la compile

    et quand je suis l'exemple :http://c.developpez.com/faq/?page=st...STRINGS_strcmp
    mon aplli plante

  4. #4
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Simple question : Ce code compile chez toi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dirdossier opendir(/mon_dossier/)
    Il manque un = entre dirdossier et opendir. Et un point virgule à la fin.

    Tu déclares 'struct dirent *nomfichier;' mais tu ne fais aucun 'readdir' donc quand tu tentes d'accéder à nomfichier->d_name bah ... ça se passe plus ou moins bien.

    Quand tu mets un 'while' il faut mettre une condition derrière !

    Même remarque que plus haut : Il faut utiliser strcmp pour comparer les chaînes de caractères.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut
    Pouet_forever : tout est bon de ce cote du code

    c'est juste sur instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcmp(exten,refexten)
    ou ça plante, si je met cette instruction en commentaire, pu de plantage

  6. #6
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Citation Envoyé par lrgtk Voir le message
    Pouet_forever : tout est bon de ce cote du code
    Non !
    Comme dit plus haut tu utilises un pointeur sur une structure dirent sur laquelle tu ne fais rien ... Du coup ton nomfichier->d_name est tout ce qu'il y a de plus incorrect (undefined behavior). Ensuite tu fais un strcmp sur quelque chose qui à mon sens n'a pas d'autre moyen d'être NULL.
    Faire un strcmp avec NULL résulte un joli SEGFAULT.

    Après c'est comme tu veux, si tu ne veux pas avancer ne m'écoute pas et continue à dire que tout est bon

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut
    voila le code au complet utiliser

    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
     
    DIR * dirdossier;
    dirdossier opendir(variable_mon_dossier)
    if (dirdossier != NULL)
    {
       struct dirent *nomfichier;
       while ((nomfichier = readdir(dirdossier)) !=NULL)
       {
          char *exten;
          char *refexten = "ses"; // l'extension de fichier.
          exten = strstr(nomfichier->d_name, "ses");
          if (strcmp(exten,refexten) == 0) // LE PROBLEME EST SUR CETTE INSTRUCTION
         // cette instruction en commentaire est l'appli ne plante plus ????????:calim2:
          {
              affiche dans un textview : nomfichier->name;
          }
       }
    }
    ça va mieux comme ça

  8. #8
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Il faut que tu vérifies que exten n'est pas NULL. Comme dit plus haut si tu fais un strcmp avec NULL ça ne fonctionnera pas.

    Je l'ai déjà dit plus haut mais cette ligne compile chez toi ? (ça n'étonnerais beaucoup)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dirdossier opendir(variable_mon_dossier)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 101
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Il faut que tu vérifies que exten n'est pas NULL. Comme dit plus haut si tu fais un strcmp avec NULL ça ne fonctionnera pas.

    Je l'ai déjà dit plus haut mais cette ligne compile chez toi ? (ça n'étonnerais beaucoup)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dirdossier opendir(variable_mon_dossier)
    si j'ai bien compris j'enleve "=" de mon instruction
    et pour exten est initialiser a chaque whlle

  10. #10
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Ceci serait plus correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dirdossier = opendir(variable_mon_dossier);
    Citation Envoyé par lrgtk Voir le message
    pour exten est initialiser a chaque whlle
    Initialisé ? non... Déclaré serait plus juste.
    Je te parle de NULL parce que la fonction strstr peut renvoyer NULL si la sous chaîne "ses" n'est pas trouvée. Visiblement chez toi c'est le cas

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

Discussions similaires

  1. probleme de condition et de boucle
    Par avantoux dans le forum ASP
    Réponses: 5
    Dernier message: 23/03/2006, 09h59
  2. [probleme] teste de saisie de formulaire
    Par razielmyth dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/01/2006, 12h43
  3. Probleme de conditions
    Par guy2004 dans le forum Langage
    Réponses: 11
    Dernier message: 05/11/2005, 15h54
  4. probleme gestion condition switch - case
    Par DarkMax dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2005, 15h25
  5. probleme test presence d'un fichier(avec fso)
    Par pagez dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/08/2005, 16h24

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