2013-10-17 2 views
0

J'ai donc le programme suivant qui sort le paramètre avec la longueur maximale. Je veux faire une exception alors quand je lui donne 0 paramètres, j'obtiens une erreur me disant que j'ai besoin d'au moins un paramètre.Programme simple Segmentation Défauts avec 0 paramètres de ligne de commande

// Program which given an number of program parameters 
// (command-line parameters, calulates the length of each one 
// and writes the longest to standard output. 

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 


int main(int argc, char *argv[]) 
{ 

    int i; 
    int maxLength = strlen(argv[1]);  
    char* maxString = argv[1]; 

    if (argc<=0) 
    { 
    printf("You cannot have 0 parameters\n"); 
    exit(0); 
    } 

    for(i = 2; i < argc; ++i) 
    { 
    // find out the length of the current argument 
     int length = strlen(argv[i]); 

     if (maxLength < length) 
     { 
      maxLength = length; 
     maxString = argv[i];  
     } // if 

    } // for 

printf("Largest string is %s\n", maxString); 

} // main 

Ceci est mon code, mais pour une raison quelconque, je reçois une erreur de segmentation quand je donne 0 arguments, au lieu du message.

Des pensées?

+1

Cela nécessite un peu plus de code de contexte. – usr2564301

+0

J'ai ajouté tout le code. – Sarah97

+0

Que diriez-vous de nous donner le numéro de ligne de la segfault? Pourquoi perdre notre temps à lire le code si vous ne nous donnez pas autant d'informations? Désolé, mais si vous ne publiez pas de backtrace avec le crash qui montre un manque fondamental de tentative de réparation vous-même. –

Répondre

4

Modifier après avoir modifié la question: vous utilisez également argv[1]avant vous avez coché argc. Ceci est une erreur

Si vous ne passez aucun argument, argc va être 1 (car argv[0] est généralement le nom de l'exécutable).

Alors

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    if(argc<=1) 
    { 
     printf("You cannot have 0 parameters\n"); 
     exit(255); 
    } else 
    { 
     int i; 
     int maxLength = 0; 
     const char* maxString = 0; 

     for(i = 1; i < argc; ++i) 
     { 
      // find out the length of the current argument 
      int length = strlen(argv[i]); 
      if(maxLength <= length) 
      { 
       maxLength = length; 
       maxString = argv[i]; 
      } 
     } 
     printf("Largest string is %s\n", maxString); 
    } 
} // main 
+0

Je reçois toujours la faute de segmentation pour une raison quelconque. En passant, j'ai ajouté le code entier. – Sarah97

+0

Cool, ça marche maintenant. Merci, je n'ai pas vu ça. – Sarah97

3

Si vous donnez des arguments nuls dans la ligne de commande argc sera de 1 pas 0. Le nom de l'exécutable sera le premier argument.

Questions connexes