Il ressemblera à 1 Combien d'éléments de tableau puis-je ajouter dans 2 Quelle est la taille maximale de chaque int Main (int Argc, char * argv []); code>. Mes questions sont: p>
argv [] code>? p>
char * code>? p>
4 Réponses :
Les deux de ceux-ci ne sont délimités que par la quantité de mémoire que vous avez (ou la quantité de mémoire que votre système d'exploitation donne votre programme). P>
Edit: En réalité, le nombre d'arguments est également délimité par la taille de int code>. p>
Ou combien de mémoire votre système d'exploitation donne pour la ligne CMD (qui est assez limitée dans la plupart des osses, et parfois très durcodé)
Je pense que cette réponse répond à «Quelle est la taille maximale de tout Char * toujours», alors que le questionneur, probablement dû à un malentendu, demande quelle taille maximale du Char * code> s dans ARGV [ ] sont.
Windows vous donne très peu de mémoire (parfois, il s'agit de quelques ko de ligne de commande arguments), tandis que toutes les plates-formes UNIX sont si généreuses que si vous avez besoin de plus, vous le faites mal.
Je pense que vous êtes mal compris ce qui se passe ici. Dans votre code, vous n'avez pas ajouté quelque chose à argv [] et vous ne vous inquiétez pas de leur taille maximale. Lorsque quelqu'un dirige votre programme compilé, comme , votre fonction principale sera appelée. Dans votre programme, vous devez supposer que le contenu de argc code> sera 4,
argv [0] code> sera
./ javas_program code>,
argv [1] code> sera < code> argument1 code>,
argv [2] code> sera
argument2 code>, etc. p>
argv [] code> peut être n'importe quelle taille. Si vous voulez les limiter à une taille spécifique, vous devriez vérifier qu'ils ne sont pas plus grands que cela. P> p>
Cela dépend probablement du mécanisme que vous utilisez pour démarrer votre programme. Si c'est via une coquille ( Si vous démarrez votre programme via bash code> ou autre), vous devez rechercher si elle impose des restrictions. P>
Execv code> ou quelque chose de similaire, ils ne doivent être soumis que dans les mêmes restrictions que n'importe quel tableau et chaîne, et, comme une personne notée, car
argc code > est
int code> pour des raisons historiques, à la taille limitée de
int code> non de
taille_t code>. p>.
Vous pouvez essayer: http://pubs.opengroup.org/onlinepubs/007904975/basedefs/limits.h.html P> arg_max est une longueur maximale de l'argument sur les fonctions EXED, y compris les données d'environnement. P>
BlockQuote> C'est-à-dire, il n'y a pas de limite individuelle sur le nombre d'arguments ou de la longueur de l'argument. Seule la limite de taille totale requise pour stocker tous les arguments et les variables d'environnement. P> sur les arguments de ligne de commande Linux et les variables d'environnement sont placées dans une nouvelle pile de processus. Donc, la taille de la pile de processus / filetage est la limite supérieure ultime. Les limites spécifiques à Linux sont codé en dur dans le noyau : p>
xargs code>
chiffres de la longueur de la ligne de commande maximale à l'aide de SYSCONF (_sc_arg_max); code> qui donne la même valeur que celle rapportée par
getconf arg_max code>. P >
Je pense que c'est dépendant de la mise en œuvre, vous ne pouvez pas compter sur une liaison spécifique.
Si vous avez besoin de passer tellement de paramètres que vous devez penser à ces limites supérieures, votre risque de faire quelque chose de mal. Vous avez probablement besoin d'une forme d'IPC.
Mais pourquoi i> avez-vous besoin de ces informations? Si vous avez besoin, vous faites peut-être quelque chose de mal.
1 J'utilise Linux 2, je transmettrai une info de beaucoup d'informations par Script PHP à l'aide d'Exec (). 3 Je pense que l'utilisation de fichier pour échanger les données coûtera plus de temps que d'utiliser des arguments de la fonction principale. Merci
@javas: Un fichier n'est pas la seule forme d'IPC, par exemple, vous pouvez utiliser
popen code> et écrire beaucoup de données via le tuyau. Mais sur Linux, les lignes de commande sont autorisées à être très longues de toute façon, pour supporter des éléments tels que
ls * journal code>.