Passage de parametres

Signaler
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
3 août 2007
-
Messages postés
240
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
22 mars 2009
-
Bonjour,


je cherche à savoir comment on récupère un paramètre un poil particulier...

Mon appli est un scan de port, j'aimerais que l'utilisateur choisisse les ports
qu'il veut scanner. Pour cela, j'aimerais que lors de l'exécution de l'appli
(en ligne de commande) il puisse saisir les ports à scanner (« Scan 80 21
23 161 162… »). Comment faire pour récupérer ces ports sachant
que je ne connais pas le nombre de ports qui vont être saisis?
Je pense qu'il faudrait utiliser les "" de manière
à ce que les "argc, argv" voit cela comme un seul paramètre mais j’aimerais
un peu plus de précision si c’était le cas.


Merci

3 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Je comprend pas ce qui te dérange d'avoir un jolie tableau avec un port par case dans argv et le nombre de ports dans argc.
Si tu veux une chaîne avec tous tes ports dedans, calcul sa tailleà partir de argc/argv, alloue la avec malloc, et utilise strcat si tu fais du C.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
#include
#include <sstream>

int main(int argc, char * argv[])
{
if (argc > 1)
{
    const unsigned int portNumber = argc-1;

    unsigned short * pPort = new unsigned short[portNumber];

    for (unsigned short k = 0 ; k < portNumber ; ++k)
    {
         std::istringstream iss(argv[k+1]); // Le premier c'est le nom de l'éxécutable
        
         if (!(iss >> pPort[k]) || !iss.eof())
         {
              std::cout << "Un des arguments n'est pas correct" << std::endl;
              delete[] pPort;
              return -1;
         }
    }

    // Et la tu as ton tableau de port

   delete[] pPort;
   return 0;
}
else
    std::cout << "Usage ... " << std::endl;

return 0;
};

C'est fait rapidement et non testé mais ca doit marcher ou pas loin de l'etre.
Messages postés
240
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
22 mars 2009

Un petit plus d'explication, lorsque tu code en mode console, tu as ton main sous la forme:

int main(int argc, char * argv[])
{
 ...
return 0;
}

argc représente le nombre d'arguments passés

et argv, le tableau des arguments

plus qu'a traiter avec une boucle, comme sous l'exemple de [auteurdetail.aspx?ID=15482 luhtor]

bye et bn codage