Windows passe réellement la totalité de la ligne de commande brute en tant que chaîne unique à un programme; voir GetCommandLine. Lorsque vous écrivez main(int argc, char **argv)
, la bibliothèque d'exécution C avec laquelle votre programme est lié est responsable de la division de la ligne de commande en mots dans votre argv
.
Nous avons donc besoin de plus d'informations: quel est votre shell, comment invoquez-vous votre commande et quelle bibliothèque d'exécution C utilisez-vous? Le problème que vous voyez n'est définitivement pas Windows lui-même, et je ne peux pas le reproduire ici avec cmd.exe et le CRT de MSVC.
C:>type CON > test.c
#include <stdio.h>
int main(int argc, char **argv) {
int i;
printf("%d\n", argc);
for (i = 0; i < argc; i++)
printf("[%d] <%s>\n", i, argv[i]);
return 0;
}
^Z
C:\>cl test.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
test.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test.exe
test.obj
C:\>test.exe *
2
[0] <test.exe>
[1] <*>
C:\>
Si j'utilise CRT Cygwin, et courir de shell Bash Cygwin, alors je ne vois pas non plus un problème.
C:\>C:\cygwin\bin\bash -l
$ cd /cygdrive/c
$ cc test.c
$ ./a.exe '*'
2
[0] <./a>
[1] <*>
$
Il est seulement si j'essaie de les mélanger — exécuter un programme utilisant CRT Cygwin de cmd.exe — où je vois votre problème potentiellement
$ exit
C:\>a.exe *
19
[0] <a>
[1] <AUTOEXEC.BAT>
[2] <BOOT.INI>
[3] <CONFIG.SYS>
[4] <Documents and Settings>
[5] <IO.SYS>
[6] <MSDOS.SYS>
[7] <NTDETECT.COM>
[8] <NTLDR>
[9] <Program Files>
[10] <RECYCLER>
[11] <Recycled>
[12] <System Volume Information>
[13] <WINDOWS>
[14] <cygwin>
[15] <hiberfil.sys>
[16] <pagefile.sys>
[17] <temp>
[18] <a.exe>
C:\>
mais je ne vois pas de problème avec des guillemets doubles.
C:\>a.exe "*"
2
[0] <test.exe>
[1] <*>
C:\>
Les guillemets doubles ne fonctionnent pas pour moi - mais je suis en utilisant cmd Windows 7 et gcc avec votre programme de test. Quelle version de cmd.exe utilisiez-vous? –
Ok, je l'ai compris: c'est une chose mingw32, voir https://www.cygwin.com/ml/cygwin/1999-11/msg00052.html –