2009-11-23 13 views
1

Je réalise que c'est une question incroyablement noob, mais je l'ai googlé pour cela et je n'arrive pas à trouver de réponse (probablement parce que j'ai écrit le mauvaise question ... ne hésitez pas à corriger si j'ai)Obtenir le nombre d'éléments dans un pointeur vers un tableau char en C++

J'ai donc ce code:

int main(int argc, char* argv[]) 
{ 
    puts(argv[1]); 
    return 0; 
} 

Il fonctionne très bien si j'ai passé un paramètre à mon programme, mais si je ne , alors évidemment ça va échouer puisqu'il essaye d'indexer un élément inexistant du tableau.

Comment trouver le nombre d'éléments dans mon tableau de chaînes?

Répondre

8

C'est ce à quoi sert argc. Il contient le nombre d'éléments dans argv. Essayez de compiler et exécuter ceci:

#include <stdio.h> 
int main(int argc, char* argv[]) { 
    int i; 
    if (argc < 2) { 
     printf ("No arguments.\n"); 
    } else { 
     printf ("Arguments:\n"); 
     for (i = 1; i < argc; i++) { 
      printf (" %d: %s\n", i, argv[i]); 
     } 
    } 
    return 0; 
} 

test fonctionne:

pax> ./prog 
No arguments. 
pax> ./prog a b c 
Arguments: 
    1: a 
    2: b 
    3: c 

Le tableau argv varie de argv[0] (le nom utilisé pour invoquer le programme, ou « » si elle est non disponible) à argv[argc-1]. Le premier paramètre est actuellement argv[1].

La norme C++ exige en fait que argv[argc] est 0 (un pointeur NULL) de sorte que vous pourrait ignorer argc tout à fait et à quelques pas seulement à travers le réseau argv jusqu'à ce que vous frappez la valeur NULL.

+0

Oh. Je ne peux pas croire que je n'ai pas vu ça ... Je me sens comme un idiot total maintenant :( –

+0

'int * pKsEnd = (int *) calloc (strlen (pString), sizeof (int));'. Je veux Comme le 'sizeof (pKsEnd)' retournera toujours '4' sur ma machine. ** EDIT: ** Vous devriez aussi savoir que je l'utilise en tant que tableau, cela affecte-t-il mon programme? – barnes

+1

@barnes, c'est une question plutôt qu'un commentaire.Si cela n'avait pas été demandé auparavant, je suggérerais de le poser comme une question afin d'obtenir plus d'exposition. été demandé avant, je vous suggère de chercher SO, où vous trouverez une réponse comme http://stackoverflow.com/questions/1598773/-there-a-standard-function-in-c-that-return-the -length-of-an-array/1598867 # 1598867 – paxdiablo

0

argc est un certain nombre de paramètres. notez que le nom de votre application est également un paramètre ;-)

+0

Techniquement argv [0] est note nécessairement le nom d'application. C'est une chaîne spécifique à l'OS qui représente l'application (qui peut être ou non absolue ou relative). –

+0

D'accord. Considérant le contenu de la question - j'essayais de simplifier ;-) – Zepplock

0

La réponse est contenue dans argc. NumOfParamaeters = argc-1;

1

C'est ce que argc est.

for (int j = 0; j < argc; ++j) 
    puts (argv [j]); 
return 0; 

Cela correctement imprimer tous les arguments/

Questions connexes