2013-10-11 5 views
0

J'ai un appel de fonction qui passe une ligne de commande en tant que paramètre et est défini comme suit:Conversion et travailler avec char ** et char *

process_raw_cmdline(char** line) 
{ 
     // 
} 

Je voudrais éventuellement lire à travers cette ligne et rupture bas pour utiliser des parties de la ligne comme paramètres pour d'autres choses. Quel serait un bon moyen de prendre cette ligne et d'enregistrer différents "mots" brisés par des espaces. Je devrai aussi éventuellement convertir des parties de cette ligne en entiers.

+0

Est-ce le même que le second paramètre à la fonction 'main' (communément appelé 'argv')? Alors ce n'est pas une ligne mais un tableau de chaînes. – Oswald

+0

J'implémente un shell et dans ce cas je veux passer ce qui est entré dans la ligne de commande en tant que paramètre à traiter ailleurs. –

+0

Un bon moyen serait d'essayer, puis voir si vous avez des problèmes spécifiques. Ce n'est pas une bonne question ou une question sous sa forme actuelle. –

Répondre

1

En général, lorsque vous obtenez la ligne de commande sous forme d'un char ** est déjà décomposé en un seul mot, ou mieux, simples entités sur la ligne de commande:

binary-name arg1 arg2 "arg3 arg3" arg4 

Dans cet exemple, arg3 arg3 est une seule entité (vous n'obtiendrez pas les devis). Cependant, pour lire correctement le caractère **, vous devez connaître le nombre de mots! C'est pourquoi dans un programme C, main() est appelée avec les arguments argc (nombre de mots) et argv (char **). Ensuite, vous pouvez accéder à argv [0] ... argv [argc-1]. Dans notre exemple:

  • argv [0] ->binary-name
  • argv [1] ->arg1
  • ...
+0

Eh bien pour mes fins, je vais savoir combien de mots "devrait" être entré. Comme c'est différent d'une fonction main(), suis-je encore capable de travailler avec cette ligne? –

+0

@GasperGulotta tant que vous ne surchargez pas la fin du tableau argv. C'est pourquoi vous avez besoin du compte, mais si vous avez un compte fixe ou quelque chose, allez-y. –

+0

Il est très dangereux de fonctionner sur une hypothèse comme celle-ci! Une mauvaise entrée de l'utilisateur peut provoquer une panne de votre programme ou une mauvaise utilisation excessive. Votre programme devrait toujours être en mesure de faire face à une mauvaise entrée de l'utilisateur. N'écrivez pas un programme comme ça, c'est de là que viennent les cauchemars de la sécurité! – ypnos