2017-03-14 2 views
2

Je travaille sur un programme C++ où l'un des arguments de la ligne de commande doit être passé une regex. Par exemple: abc.exe --option ab\[0\]Pass dans les arguments de ligne de commande de C++

Lorsque j'accède à la valeur de l'option à partir du programme, il devient ab\\[0\\] qui devient une expression régulière différente. Dans le programme lorsque j'essaie de remplacer \\[ par \[ en utilisant boost::replace_all, le résultat est [ qui n'est pas non plus la sortie prévue pour moi.

Ainsi, des suggestions sur la façon de passer et de retenir \[ cela en faisant passer par des arguments de ligne de commande

+0

Afficher le code pour votre remplacement de boost, es-tu échapper tes backslashes? Vous devrez probablement remplacer '\\\\ [' par \\ ['... –

+0

Essayez les guillemets? C'est difficile à dire sans le code. –

Répondre

3

Vous pouvez citer le paramètre:

abc.exe --option "ab\[0\]" 

Ou utiliser la séquence d'échappement du shell:

abc.exe --option ab\\[0\\] 

Les avez-vous essayé?

+0

Si je mets '' '" ab \ [0 \] "' ''. La valeur à l'intérieur du programme est la même, c'est-à-dire '' '" ab \\ [0 \\] "' '' Si passé comme '' 'ab \\ [0 \\]' ''. Il devient '' '' ab \\\\ [0 \\\\] "' '' – Sharad

+0

Comment affichez-vous ce paramètre? Il semble que le formateur est en train d'insérer dans les échappements, donc vous pouvez dire que \\ [dans la chaîne de caractères signifie les deux caractères: \ [. Afficher les caractères bruts On dirait que vous obtenez ce que vous voulez. – ScottK

+0

Affichez-vous la chaîne via printf ("% s \ n", optString); ou en utilisant un débogueur? printf n'ajoutera pas de séquences d'échappement, donc je ferais confiance à ce qu'il montre. – ScottK

0

C'était un problème avec la façon dont Visual Studio affiche le symbole. Quand j'ai regardé le code ASCII du symbole, ça allait. Merci @ScottK pour m'aider à déboguer ce à travers vos commentaires