2017-08-13 1 views
0

J'ai essayé de coder des programmes qui ont des arguments de ligne de commande en entrée. Quand je les arguments de ligne de commande entre guillemets dans cmd commeUtilisation de guillemets dans les arguments de ligne de commande

g++ -o filename.exe filename.cpp // for compiling

et

filename.exe "2 -1 0 2 -3" // run command

réponse était incorrecte. Mais quand je

g++ -o filename.exe filename.cpp // for compiling

filename.exe 2 -1 0 2 -3 // run command

réponse est correcte ...... pourquoi est-il passe ... quelqu'un peut-il suggérer quelque chose pour y remédier pls .... je l'ai utilisé C++ pour code et cmd pour se conformer et exécuter et tester.

+4

Tout ce qui est entre guillemets est passé en argument ** un **. – Galik

+0

Les guillemets dans CMD échappent à la plupart de ses caractères spéciaux, mais ils n'ont rien à voir avec le fait que CMD passe * arguments * à un programme. Le devis est analysé partiellement par CMD pour trouver le fichier à exécuter s'il est cité. Sinon, il est analysé par le processus lui-même. Les programmes Windows sont exécutés avec une chaîne de ligne de commande, et ils utilisent généralement soit le [C runtime pour analyser les arguments] (https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line -arguments) ou appelez CommandLineToArgvW, qui utilise des règles similaires. – eryksun

Répondre

1

Vous passez tous les arguments de ligne de commande séparés par un espace , mais si l'argument lui-même a un espace, vous pouvez transmettre des arguments par les mettre à l'intérieur des guillemets doubles « » ou des guillemets simples ' '.

Alors

"2 -1 0 2 -3" // One argument 

tout

2 -1 0 2 -3 // Five arguments 

Vous pouvez les combiner

"2 -1 0" 2 -3 // Three arguments 

Les arguments de ligne de commande sont traités à l'aide main() arguments de la fonction où argc fait référence au nombre de arguments passés, un nd argv [] est un tableau de pointeurs qui pointe vers chaque argument passé au programme.

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

argv[0] est toujours le nom du programme. Dans votre cas filename.exe.