Comme @Sugrue, je suis également en train de creuser un ancien thread. Pour expliquer pourquoi il y a 32768 (je pense qu'il devrait être 32767, mais laisse croire que les tests expérimentaux résultent) la limitation des caractères, nous devons creuser dans Windows API.
Peu importe comment vous lancez le programme avec les arguments de la ligne de commande, il va à ShellExecute, CreateProcess ou étendu leur version. Ces API enveloppent essentiellement d'autres API de niveau NT qui ne sont pas officiellement documentées. Pour autant que je sache ces appels enveloppent NtCreateProcess, ce qui nécessite la structure OBJECT_ATTRIBUTES en tant que paramètre, pour créer cette structure InitializeObjectAttributes est utilisé. Dans cet endroit, nous voyons UNICODE_STRING
. Donc, permet maintenant de jeter un coup d'oeil dans cette structure:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Il utilise USHORT
(longueur 16 bits [0; 65535]) variable pour stocker la longueur. Et selon this, la longueur indique la taille en octets, pas les caractères. Nous avons donc: 65535/2 = 32767
(parce que WCHAR
est de 2 octets de long).
Il y a quelques étapes à creuser dans ce nombre, mais j'espère que c'est clair.
De même, pour supporter @sunetos, répondez à ce qui est accepté. 8191 est un nombre maximum autorisé à être entré dans cmd.exe
, si vous dépassez cette limite, l'erreur The input line is too long.
est générée. Donc, la réponse est correcte malgré le fait que cmd.exe
n'est pas le seul moyen de passer des arguments pour un nouveau processus.
Et ma question est .. Aussi pouvons-nous le personnaliser..if du tout? – eRaisedToX
@ eRaisedToX bien vieille réponse, mais probablement non. Mais pourquoi avez-vous besoin de cela en première place? Répondre à cette question donne généralement de meilleures idées. – ST3