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 :

Analyse des options de la ligne de commande


Sujet :

C

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Etudiant En dev jeux video ESGI. Dev c/c++
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Etudiant En dev jeux video ESGI. Dev c/c++

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Heu merci, mais j'avais regler mon probleme.

    j'ai ininitialiser ma varaible par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    	//init********************************************************
    	for(i;i<=c_argc;i+=1)
    	{
    		c_parametre->str_cmd[i] = "\0";
    	}
    apres j'ai juste fait

    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
     
    for(i=1;c_parametre->str_cmd[i] != "\0";i+=1)
    	{
     
    		fichier = fopen(c_parametre->str_cmd[i],"r");
    		if(!fichier)//if don't open or not found the pattern
    		{
    			//pattern don't match
    			continue;
    			//not_found = FALSE;
    		}
    		else
    		{
    			// partern founded
    			read_file(c_parametre,*fichier);
    			not_found = TRUE;
    		}
     
    	}
    bon j'admet c'est sale ... mais personne me reponder

    @Kirilenko



    franchement j'aurais du y penser au argc... je suis tres tres ....biiip

    @jouana

    Hein ? c'est faux !? mais mais sa marche ... pourtant je suis bien sur VS 2010.... et pour badptr d'apres mon maitre d'alternance ... c'est quand la zone memoire n'a pas ete innitialiser ..... ou un truc du genre ....

    mais il nya pas de NULL ... dans argc .... sauf si c'est moi qui le met ....

  2. #22
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Ok bon bah j'avais raison je ne m'incline plus ^^.

    Oui ont peu jouer sur le doit être null je pense.

  3. #23
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    Soit ton implémentation n'est pas conforme à la norme (ce que j'ai du mal à croire, pour le coup), soit tu as un problème dans ton code. Mais je maintiens que argv est null-terminated dans un environnement hôte.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  4. #24
    Nouveau membre du Club
    Homme Profil pro
    Etudiant En dev jeux video ESGI. Dev c/c++
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Etudiant En dev jeux video ESGI. Dev c/c++

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Non je donne un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    char *toto = NULL; // oui pardons je suis pas inspire 
    char tata; // --> Lui donnerer un badptr qui etais exactement mon probleme

  5. #25
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    On ne se comprend pas, là. Je parle de argv. Si je passe, en ligne de commande, ./a.out arg1 arg2 arg3, alors :

    • argv[1] = "arg1"
    • argv[2] = "arg2"
    • argv[3] = "arg3"
    • argv[4] = NULL
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  6. #26
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Je reviens vite fait sur ton code qui n'est pas bon je pense

    badptr = pointeur non initialisé.

    si ont reprend ton dernier exemple c'est une char* pas un char il n'y aura pas de soucis de ce style juste une valeur erroné.

    Ensuite tu as ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(i;i<=c_argc;i+=1)
    	{
    		c_parametre->str_cmd[i] = "\0";
    	}
    si c'est un char** tu colle un '\0' sur toutes tes adresses donc si je ne me plante toujours pas tu met tt à null.

    Si c'est une chaîne ou tu as tous concaténés alors tu mets un '\0' sur toutes les première cases.

    Donc dans tous les cas tu ne récupéras pas tes options.

    Le vrai code est tout simplement ça, dans le cas d'un char**

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    c_parametre->str_cmd[argc] = NULL;
    Si c'est un char*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      taille = 1;
      for (count = 1; count < argc; count++)
      {
          taille += strlen(argv[count]) - 1;
      }
      c_parametre->str_cmd[taille] = '\0';
    Le mieux étant d'ajouter le '\0' pendant la concaténation.

  7. #27
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Après pour l'histoire du null à la fin.

    Il est écrit que argv[argc] doit être null.

    Le doit être ne force pas l'implémentation et de souvenir je crois qu'aucun os le met à la fin du argv si tu boucle dessus tu vas déborder et finir sur les variable d'env (arge)

  8. #28
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par jouana Voir le message
    Le doit être ne force pas l'implémentation et de souvenir je qu'aucun os le met à la fin du argv si tu boucle dessus tu vas déborder et finir sur les variable d'env (arge)
    Désolé, mais je n'ai rien compris.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  9. #29
    Nouveau membre du Club
    Homme Profil pro
    Etudiant En dev jeux video ESGI. Dev c/c++
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Etudiant En dev jeux video ESGI. Dev c/c++

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Le debugger de VS ne me montre pas le NULL ou le caractere separateur(teminaison) aui devrais etre à la fin de l chaine de caractere ....

  10. #30
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Désolé je vais m'appliquer.

    En gros la norme n'est pas implémenté à 100%.

    Et je sais que de souvenir quand j'ai dev sur FreeBSD par exemple mais c'est le cas pour les autres OS sur lesquelles je suis passé.

    La valeur NULL a la fin de argv n'est pas présente.
    Ensuite ça peu dépendre de flag de compile ou de configuration du système.

    Et le problème qui arrive souvent quand tu ne boucle pas sur argc pour parcourir ton argv, tu tombe sur les variables d'environnement qui est le 3ème paramètre du main (arge).

    En espérant être plus claire.

  11. #31
    Nouveau membre du Club
    Homme Profil pro
    Etudiant En dev jeux video ESGI. Dev c/c++
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Etudiant En dev jeux video ESGI. Dev c/c++

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 38
    Points
    38
    Par défaut
    Merci de ton explication

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Gestion des options de la ligne de commande
    Par gl dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 17h38
  2. Analyser les options passées en ligne de commande
    Par Musaran dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 17h33
  3. Récupérer des arguments passé en ligne de commande
    Par FinalSpirit dans le forum VBScript
    Réponses: 2
    Dernier message: 01/10/2007, 10h54
  4. Control des bureaux virtuels en ligne de commande ?
    Par Stéphane ERARD dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 20/06/2006, 09h22
  5. Réponses: 6
    Dernier message: 05/10/2005, 14h22

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