2017-06-22 7 views
-1

Je suis confronté à un problème lors du test d'un programme C compilé avec mingw dans le shell MSYS2: J'ai écrit un analyseur de ligne de commande qui accepte les options selon la convention de Windows (en commençant par /). Si je l'appelle mon programme comme celui-ci pour générer un fichier de sortie:MSYS2: comment désactiver la traduction automatique de pathname pour conduire la lettre?

./example.exe /o test 

Ce qui finit dans argv[1] est en fait O:/. Cela fonctionne correctement lors d'un test à partir d'une fenêtre de console exécutant CMD.EXE. Ce programme vraiment minimal démontre le comportement:

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    if (argc > 1) 
    { 
     puts(argv[1]); 
    } 
    return 0; 
} 
$ ./example.exe /o 
O:/ 

Donc je suppose que c'est le shell MSYS2 essayer d'être utile et de remplacer quelque chose qui ressemble à un chemin à une lettre ci-dessous racine dans une syntaxe lettre de lecteur. Est-il possible de désactiver ce comportement? C'est un peu compliqué de toujours lancer CMD.EXE pour tester.

+0

Non lié à C. Avez-vous essayé échapper ou enfermer dans les tiques/'" ' – Olaf

+0

@Olaf MSYS2 est un environnement de développement * pour * C et la règle de base est un * * tag de langue est presque toujours approprié! Même chose que des questions sur les arguments de la ligne de commande de 'clang' ou un' Makefile' pour construire du code C ... et bien sûr j'ai essayé * choses évidentes * comme ça! –

+0

@Olaf et le vote pour migrer est également faux, voir [Quels sujets puis-je poser à propos d'ici] (https://stackoverflow.com/help/on-topic), en particulier "* outils logiciels couramment utilisés par les programmeurs *" –

Répondre

1

Vous pouvez utiliser la variable d'environnement MSYS2_ARG_CONV_EXCL pour désactiver ce comportement. Par exemple, essayez d'exécuter:

MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test 
+0

Grand, résout le problème, merci. Avez-vous une ressource expliquant le contenu de cette variable d'environnement? –

+0

Je ne peux pas le trouver pour l'instant, mais c'est essentiellement une liste de préfixes d'arguments séparés par un caractère séparateur. –

+0

D'accord, je vais chercher moi-même et en attendant, souvenez-vous juste du nom :) –