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. #1
    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 Analyse des options de la ligne de commande
    Dans le but d'un projet sur le codage d'un grep. Je me suis demande, vue qu'on peut combiner plusieurs option, comment faire?[la syntaxe du grep est donc varible ....].
    J'ai etendue quelque par ... "parseur" si cela parle à quelqu'un ...
    pour-ai je avoir des informations dessus? surtout dans le concept de parseur de commande ou d'argument ...

  2. #2
    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
    Parser est un bien grand mot en l'occurrence. La stratégie habituelle consiste à jouer avec les booléens ou les flags, et quelques énumérations. Concrètement, il te suffit de faire une boucle sur chaque argument (donc argv[i], ou i varie entre 1 et argc - 1). Si tu reconnais cet argument, tu ajoutes au booléen (ou au flag) correspondant la valeur vraie. À la fin de ta boucle, tu sais donc quelles ont été les options réquisitionnées par l'utilisateur. Dans la pratique, il existe des utilitaires divers et variés comme getopt (POSIX.1-2001) qui permettent de te faciliter le travail, en allant chercher les options directement. Ça dépend dans quelle optique tu réalises ce programme. Un petit exemple pour une commande acceptant les options -e, -i, et -o.

    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
    #include <getopt.h>
    #include <stdlib.h>
     
    enum {
    	OPTION_E = 1,
    	OPTION_I = OPTION_E << 1,
    	OPTION_O = OPTION_I << 1
    };
     
    int main(int argc, char *argv[])
    {
    	unsigned int flag = 0U;
     
    	for (;;) {
    		int c = getopt(argc, argv, "eio");
     
    		if (c == -1)
    			break;
    		else switch (c) {
    		case 'e': flag |= OPTION_E; break;
    		case 'i': flag |= OPTION_I; break;
    		case 'o': flag |= OPTION_O; break;
    		default: /* option inconnue */
    		}
    	}
     
    	if (flag & OPTION_E) /* option -e */
    	if (flag & OPTION_I) /* option -i */
    	if (flag & OPTION_O) /* option -o */
     
    	return EXIT_SUCCESS;
    }
    Dis-nous plus précisément où tu coinces. Étudie la documentation.
    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

  3. #3
    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 ta reponce.

    tu me demande dans quel optique?
    Je suis dans un group et on doit coder le grep avec un maximum d'option(en c).
    Moi je doit m'occuper de coder la fonction de base et d'une fonction qui gere les differentes options.

    my_grep devras tourner sur mac et donc linux et bien sur microsoft.
    Et cela est donc problematique et dite moi si je me trompe mqis getop() et seulement sur linux. Comme la je code sur Visual Studio ...

  4. #4
    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
    Effectivement, comme Microsoft fait du portage POSIX à sa sauce, il sera difficile d'utiliser getopt de manière portable, ici. Tu devras donc traiter les arguments par toi-même (à moins qu'une recherche te mène à d'autres bibliothèques qui correspondraient plus à tes attentes). Tu peux donc faire comme je te l'ai dit dans mon précédent message. Je te propose un squelette (non testé, évidemment) :

    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
    unsigned int option = 0U;
     
    for (i = 1; i < argc; ++i) {
        switch (get_option(argv[i])) {
        case 'e':
            option |= OPTION_E;
            break;
        case 'i':
            option |= OPTION_I;
            break;
        case 'o':
            option |= OPTION_O;
            break;
        default:
            /* argument inconnu */
        }
    }
    Avec get_option qui extrait d'un argument l'option contenue. Si des options prennent des arguments en plus, tu peux te créer un pointeur sur l'argument, et l'avancer après l'option dans la fonction en question.
    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

  5. #5
    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
    voila ce qure j'ai fait pour l'instant :
    #define OptMax 4

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #define OptMax 4 // je me limite pour l'instant à 3 options
    typedef struct s_parametre
    {
    	int option[OptMax]; // save the different option extracted of argv
    	char **str_cmd;		// save argv whitout option
    }t_parametre;
     
    int main(int argc,char** argv)
    {
    	t_parametre parametre;
     
    	parseur_parametre(argc,argv,&parametre); 
     
    	return 0;
    }
     
    void parseur_parametre(int c_argc,char ** c_argv,t_parametre *c_parametre)
    {
    	int i= 0;
    	int it_str_cmd = 0;
    	c_parametre->str_cmd = (char**)malloc((c_argc)*sizeof(char*));
     
    	//init********************************************************
    	for(i;i<c_argc;i+=1)
    	{
    		c_parametre->str_cmd[i] = 0;
    	}
    	for(i = 0;i<OptMax;i+=1)
    	{
    		c_parametre->option[i]=0;
    	}
    	//***********************************************************
     
    	if(c_argc<2)
    	{
    		Error();//print Error on screen
    		exit(1);
    	}
    	for(i=0;i<c_argc;i+=1)
    	{
    		if(c_argv[i][0] == '-') // check if there are option(s) ('-' is only 
                                                                     on the first line of c_argv)
    		{
    			//get_opt() permet de determiner le nbre d'option et quel   
                                                                                    option appliquee
    			get_opt(&c_argv[i][1],c_parametre) //take the next 
                                                                                 caracteres after'-'
    		}
    		else
    		{
    			c_parametre->str_cmd[it_str_cmd] = c_argv[i];
    			it_str_cmd+=1;
    		}
    	}
    	if(it_str_cmd == 1)
    	{
    		Error();
    		printf("Aide: verifier la syntaxe apres [OPTION]\n");
    		exit(1);
    	}
     
     
    }
    puis apres j'ai essaye de me coder un get_opt() à ma maniere.

    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 get_opt(char *str_opt,t_parametre *c_parametre)
    {
    	char option[]={'E','F','G','P',0}; // liste d'option diponible du grep
    	int i = 0,j = 0;
     
    	for(i;str_opt[i];i+=1)
    	{
    		for(j;option[j];j+=1)
    		{
    			if(str_opt[i]==option[j])
    			{
     
    			}
    		}
    	}
     
    }
    le truc c'est que je fais sa au feeline ... je sais pas trop si ce que je fais est bon ...

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    pour getopt il y'a une fonction standard qui fait a peu pres ce que tu souhaite:

    http://www.kernel.org/doc/man-pages/.../getopt.3.html
    The following trivial example program uses getopt() to handle two program
    options: -n, with no associated value; and -t val, which expects an associated
    value.

    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
    40
    41
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    int main(int argc, char *argv[])
    {
        int flags, opt;
        int nsecs, tfnd;
     
        nsecs = 0;
        tfnd = 0;
        flags = 0;
        while ((opt = getopt(argc, argv, "nt:")) != -1) {
            switch (opt) {
            case 'n':
                flags = 1;
                break;
            case 't':
                nsecs = atoi(optarg);
                tfnd = 1;
                break;
            default: /* '?' */
                fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
                        argv[0]);
                exit(EXIT_FAILURE);
            }
        }
     
        printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind);
     
        if (optind >= argc) {
            fprintf(stderr, "Expected argument after options\n");
            exit(EXIT_FAILURE);
        }
     
        printf("name argument = %s\n", argv[optind]);
     
        /* Other code omitted */
     
        exit(EXIT_SUCCESS);
    }
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  7. #7
    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 ta reponce jabounnet. Mais ton avatar de chapelier fous me perturbe un peu XD

    Alors la je comprend pas ...j'ai une erreur de compilateur qui me sort par les port ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2082: redefinition of formal parameter "My_Error
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int My_Error();  --> dans le .h
    int My_Error()
    {
    	printf("Error: veuillez verifier que vous utiliser grep avec cette syntaxe :\ngrep [OPTION]... PATTERN [FILE]\n");
    	//exit(1);	
    	return 1;
    }
    et d'apres msdn http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx

    se serais un probleme de redefinition des parametres ... mais ma fonction n'a pas de parametre ....

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    se serais un probleme de redefinition des parametres ... mais ma fonction n'a pas de parametre ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int My_Error(void);  --> dans le .h
    int My_Error(void)
    ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    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
    Heuuu oui d'accord void est le parametre par default ... mais sa regle pas du tout mon probleme ...

  10. #10
    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 pourrait peut-être avoir ton code complet, afin que nous puissions localiser et reproduire l'erreur ?
    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

  11. #11
    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
    je pense pas que ca apporte grand chose .....

    mais voila

    grep.c
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    /******************************************************************************************************/
    /*										Nom Projet : my_grep                                          */
    /*										Nom fichier :my_grep.c										  */
    /*										Date dernière mise à jour: 8 nov 2012						  */
    /*										Nom : 								  */
    /*										Commentaires : contient definition des fct de my_grep.       */
    /*													   Fonctionne de paire avec main.c et my_grep.h	  */
    /******************************************************************************************************/
     
     
    #include "my_grep.h"
     
    int My_Error()
    {
    	printf("Error: veuillez verifier que vous utiliser grep avec cette syntaxe :\ngrep [OPTION]... PATTERN [FILE]\n");
    	//exit(1);	
    	return 1;
    }
    int load_file(t_parametre *c_parametre)
    {
    	int i = 0;
    	FILE* fichier = NULL;
    	// the name file(pattern) cannot to be in argv[0] 
    	for(i=1;c_parametre->str_cmd[i];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
     
    		}
    		else
    		{
    			// partern founded
    			read_file(c_parametre,*fichier);
    		}
    		fclose(fichier);
    	}
     
    	return(0);
    }
     
    int read_file(t_parametre c_parametre,FILE *file)
    {
    	char temp[1000];
    	while(fgets(temp,1000,file))
    	{
     
    	}
    }
     
    void parseur_parametre(int c_argc,char ** c_argv,t_parametre *c_parametre)
    {
    	int i= 0;
    	int it_str_cmd = 0;
    	c_parametre->str_cmd = (char**)malloc((c_argc)*sizeof(char*));
     
    	//init********************************************************
    	for(i;i<c_argc;i+=1)
    	{
    		c_parametre->str_cmd[i] = 0;
    	}
    	for(i = 0;i<OptMax;i+=1)
    	{
    		c_parametre->option[i]=FALSE;
    	}
    	//***********************************************************
     
    	if(c_argc<2)
    	{
    		My_Error();//print Error on screen
    		exit(1);
    	}
    	for(i=0;i<c_argc;i+=1)
    	{
    		if(c_argv[i][0] == '-') // check if there are option(s) ('-' is only on the first line of c_argv)
    		{
    			//get_opt() permet de determiner le nbre d'option et quel option appliquee
    			get_opt(&c_argv[i][1],c_parametre); //take the next caracteres after'-'
    		}
    		else
    		{
    			c_parametre->str_cmd[it_str_cmd] = c_argv[i];
    			it_str_cmd+=1;
    		}
    	}
    	if(it_str_cmd == 1)
    	{
    		My_Error();
    		printf("Aide: verifier la syntaxe apres [OPTION]\n");
    		exit(1);
    	}
     
     
    }
     
    int get_opt(char *str_opt,t_parametre *c_parametre)
    {
    	char option[]={'E','F','G','P',0}; // liste d'option diponible du grep
    	int i = 0,j = 0;
    	BOOL option_non_repertorie = FALSE;
     
    	for(i;str_opt[i];i+=1)
    	{
    		for(j;option[j];j+=1)
    		{
    			if(str_opt[i]==option[j])
    			{
    				c_parametre->option[j] = FALSE;
    				option_non_repertorie = true;
    			}
    		}
    		if(option_non_repertorie == false)
    		{
    			My_Error();
    			printf("Aide: verifier la syntaxe apres [OPTION]ou option non repertorié\n");
    			exit(1);
    		}
    	}
     
    }
    my_grep.h

    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #define OptMax 4
     
    #define TRUE 1;
    #define FALSE 0;
    typedef int BOOL;
    typedef struct s_parametre
    {
    	char **str_cmd;		// save argv
    	BOOL option[OptMax]; // save the different option extracted of argv
    }t_parametre;
     
     
     
    void parseur_parametre(int c_argc, char ** c_argv,t_parametre *c_parametre);
    int My_Error();
    int load_file(t_parametre *c_parametre);
    int read_file(t_parametre *c_parametre,FILE);
    int get_opt(char *str_opt,t_parametre c_parametre)
    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include"my_grep.h"
     
    int main(int argc,char** argv)
    {
    	t_parametre parametre;
     
    	parseur_parametre(argc,argv,&parametre); 
     
    	return 0;
    }

  12. #12
    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
    Tu as plusieurs erreurs, notamment :

    1. Un oubli de point-virgule à la fin d'un prototype.
    2. Des déclarations qui ne correspondent pas aux définitions correspondantes (vérifie la concordance des types des paramètres).
    3. Des constantes « true » et « false » qui ne sont pas déclarées.
    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

  13. #13
    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
    houaaa merci !!! tout sa à cause d'un point virguile ... jsuis vraiment con ... perdre du precieux temps comme un neophyte de la programmation

    Merci mille fois

  14. #14
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par hatra Voir le message
    houaaa merci !!! tout sa à cause d'un point virguile ... jsuis vraiment con ... perdre du precieux temps comme un neophyte de la programmation

    Merci mille fois
    Ca arrive a tout le monde de perdre du temps pour des erreurs de pacotilles, c'est même celles qui font perdre le plus de temps.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  15. #15
    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
    j'ai remarque que dans mon argv ... derierre les arguments que j'ai mis j'obtient un truc bad Ptr .... C'est un sousis ... parce que je fait une boucle dessus du genre ....

    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
     
    for(i=1;c_parametre->str_cmd[i];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;
    		}
    str_cmd contient argv ... quand mon c_parametre->str_cmd[i] contient Bad ptr bas l'application plante.

    J'aimerais soit eviter les Badptr ou soit m'arreter dans ma iteration lorsque je tombe dessus.

    ps: J'espere ne pas etre encore une fois warmer. Pour moi la .. c'est toujours en rapport avec les arguments qui pour moi est aussi lie au premier post que j'ai mis sur argc ...

  16. #16
    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
    Bonjour,

    argc te donne le nb de paramètres.
    le mieux serait de faire une boucle du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    for (count = 1; count < argc, count++)
    de souvenir tu n'as pas de valeur NULL a la fin de argv

  17. #17
    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
    Bonjour,

    argc te donne le nb de paramètres.
    le mieux serait de faire une boucle du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    for (count = 1; count < argc, count++)
    de souvenir tu n'as pas de valeur NULL a la fin de argv
    Si, c'est le cas.

    Citation Envoyé par C11 (n1570), § 5.1.2.2.1 Program startup
    argv[argc] shall be a null pointer.
    @hatra : Qu'entends-tu pas « Badptr » ? Tu as essayé d'obtenir son contenu ? À ce propos, ta ligne 15 me semble suspecte. Déréférencer un pointeur sur FILE n'amène rien de très non.
    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

  18. #18
    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
    Ouais mais la c'est sur la dernière version du C/C++.
    Si il a la version d'avant il se peut qu'il ai un pb à cause de ça.

    Ensuite la ligne 15 est fausse si il s'agit de la fonction de windows.

    Et badptr je crois que c'est un segmentation fault sous windows (sans rentrer dans le détail).

  19. #19
    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
    Et là, magie :

    Citation Envoyé par C89, § 2.1.2.2 Hosted environment
    argv[argc] shall be a null pointer.
    Si il y avait une différence de normalisation, je l'aurais signalé.
    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

  20. #20
    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
    Ouki, autant pour moi je m'incline :p

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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