Problèmes arguments de la fonction main

Résolu/Fermé
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016 - Modifié par NHenry le 20/03/2016 à 12:31
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016 - 20 mars 2016 à 18:19
Bonjour,
Je rencontre un problème avec les arguments passé à ma fonction main (au moment de l'appel de l'exécutable) en effet j'ai plusieurs conditions dépendant des arguments passés au main renvoyant à des fonction,mais lorsque je rentre les bons argument mon programme ne les interprète pas du out et me renvoie le message de la condition d'erreur.
Voici le code de ma fonction main :

int main(int argc ,char *argv[])
{    const int MTU = 1500;
    const int MAXchar = 1500*2+1500+2; 
    FILE *fd = fopen("dump.txt","r");
     char str[MAXchar];
    int i=1;
printf("\n%s",argv[1]);
  if((argc >=2) && (argv[1]=="-[/download/telecharger-34079918-verbose verbose]"))/* c'est ici qu'est le problème*/
   { 
      while (!feof(fd))
   { fgets(str, MAXchar, fd);  
     if (strlen(str) >= 181) {
    printf("\n\n--------Trame n° %d ------\n\n",i);
    analyse_trame(str);
    i+=1;}
   }
   }
    if(argc < 2)
   {
        while (!feof(fd))
    {  
      if (fgets(str, MAXchar, fd) != 0) {
    analyse_flag(str); } }
   }
  if(argc >=2 && argv[1] != "-verbose")
   {  printf("Mauvais argument, utilisez l'argument < -verbose > !\n\n");}
fclose(fd);
} 

Pourriez-vous me venir en aide s'il vous plaît, je souhaite que lorsque je renseigne le paramètre "-verbose" cela me renvoie vers ma fonction analyse_trame (je code sur linux, feedora) .
Merci par avance !

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

Utilisateur anonyme
20 mars 2016 à 13:15
argv[1]=="-verbose")


non

argv[1] != "-verbose"


et non


Tu dois utiliser strcmp : http://manpagesfr.free.fr/man/man3/strcmp.3.html
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 13:20
Bonjour je souhaite lancer la fonction : analyse_trame(str)

si l'utilisateur entre l'argument "-verbose",

je ne comprend donc pas pourquoi vous me conseillez d'utiliser la condition indiquant une différence

Cordialement
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 13:21
Je vous remercie tout de même de m'avoir aiguiller vers la fonction dont je semble avoir besoin !
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 13:37
MERCI A VOUS Rocailleux !!!
mon programme fonctionne maintenant parfaitement !
0
Utilisateur anonyme
20 mars 2016 à 15:32
En fait chaine1 == chaine2 va comparer l'adresse en mémoire des deux chaines et non le contenu, il faut donc passer par strcmp.
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 15:59
très bien j'ai compris merci!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
20 mars 2016 à 14:06
Bonjour,

char str[MAXchar];
Attention, ce n'est possible qu'en C99.

printf("\n%s",argv[1]);
Il vaudrait mieux vérifier le nombre d'arguments (argc) avant de faire appel à argv.

if((argc >=2) && (argv[1]=="-verbose"))/* c'est ici qu'est le problème*/

La comparaison de chaîne ne se fait pas comme ça. Utilise plutôt strcmp().

while (!feof(fd))
Attention à son utilisation. Cela détermine la cause de l'erreur de lecture du fichier. Il faut donc lire le fichier avant, et s'il y a eu une erreur, là tu peux utiliser feof(...).

Et enfin, il manque un return 0; en fin de fonction.

Cdlt,
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 14:25
Bonjour et merci
pour le return 0 ; je ne l'ai pas utilisé mais mon programme fonctionne parfaitement avec strcmp est-ce qu'il vaut mieu que je mette un return 0;
si ou ou dois-je le mettre
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
20 mars 2016 à 14:31
Ce n'est pas parce que ça fonctionne correctement que c'est correct :-).

Le return 0; se place en fin de fonction. Juste avant l'accolade finale.
N'oublie pas de revoir aussi le feof().
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 14:55
pour feof justement je vérifie à ce moment là qu'il n'y a pas 'erreur
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 15:51
Ben non. Tu utilises feof() avant de lire le contenu du fichier...
0
susano17 Messages postés 9 Date d'inscription dimanche 20 mars 2016 Statut Membre Dernière intervention 20 mars 2016
20 mars 2016 à 16:00
ah donc il faudrait que je mettes mon fgets avant les conditions (if) et a la fin des while si je comprend bien ?
0