2017-10-02 6 views
-1

J'ai récemment commencé à apprendre C++ et je suis un peu confus au sujet de argv et argc. J'essaie de déterminer si les arguments ont été passés à un programme en vérifiant la taille de argc, mais peu importe le nombre d'arguments (y compris aucun) je passe au programme la taille de celui-ci est toujours 4.Comment vérifier si les arguments ont été passés en C++

Exemple simple:

int main(int argc, char** argv) 
{ 
    std::cout << sizeof(argc); //outputs 4 with 0 or any num of arguments 
    std::cout << sizeof(argv); //outputs 8 with 0 or any num of arguments 
} 

Je trouve cette même question posée avant et je me excuse de le répéter, mais les réponses sur ces pages que je trouvais étaient en contradiction avec ce qui se passe ici. Donc, pourquoi argc est toujours 4 et y a-t-il un autre moyen de vérifier si les arguments ont été passés à main()?

Si c'est pertinent, j'utilise g ++ pour compiler.

+0

Vous devez vérifier la valeur de argc non sizeof (argc), sizeof demande le nombre d'octets de mémoire occupés par cet entier, qui est de 4 octets (32 bits). – Kulix

+0

Parfois, il est utile de commencer à réfléchir avant de poser des questions ... –

Répondre

7

sizeof(argc) aura toujours la même valeur. sizeof(variable_name) vous donne la taille que cette variable prend en mémoire. Si vous voulez savoir combien de paramètres ont été transmis, vous devez évaluer ce que contient la variable. Par exemple,

std::cout << argc - 1; 

Affichera comment les paramètres ont été transmis. Le - 1 est nécessaire car le premier paramètre est le nom du programme, donc nous ne voulons pas le compter dans le nombre de paramètres.

+0

Merci beaucoup! –

1

sizeof vous donne, à l'heure de compilation, la taille du type inclus.

Donc sizeof(argc) est sizeof(int), et sizeof(argc) est sizeof(char**). J'espère que vous appréciez ceci est donc complètement indépendant des arguments passés! Comptez simplement sur ce que C++ vous donne: argc est le nombre d'arguments passés, y compris le nom du programme. Et le nombre d'éléments dans argv est le même que argc, avec un élément supplémentaire qui est défini sur nullptr.

3

Je suis en train de déterminer si les arguments ont été transmis à un programme en vérifiant la taille des argc

argcest le nombre d'arguments. La taille de argc est la taille de l'objet int.

Alors, pourquoi est-argc toujours 4

Parce que la taille de int objet est toujours 4 octets sur votre système.

Y at-il un autre moyen de vérifier si les arguments ont été passés à main()?

Vous pouvez vérifier la valeur plutôt que la taille de argc:

std::cout << argc; 

Notez qu'il existe (en général) au moins un argument au programme: La commande qui a été utilisé pour exécuter .