Comment trouver la longueur de argv en C

#include  #include  #include  int main(int argc, char *argv[]){ int fir; //badly named loop variable char *input[] = calloc( strlen(argv), sizeof(char)); //initializing an array for( fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv strcat(input, argv[fir]); // appending to input } } 

L’erreur que je reçois concerne la ligne 7. Elle indique “passer l’argument 1 de ‘strlen’ à partir d’un type de pointeur incompatible”. Je reçois la même erreur pour la fonction strcat . Il indique également “à partir d’un caractère char ** mais attendu d’un caractère const char * ” pour les deux fonctions.

J’essaie de remplir un nouveau tableau avec tous les éléments de argv sauf le premier. J’ai essayé argv = &argv[1] et cela n’a pas fonctionné.

Les fonctions strlen() et strcat() ne prennent-elles pas les tableaux de caractères?

 int main(int argc, char *argv[]) 

argv est un tableau de pointeurs sur char (c’est-à-dire un tableau de chaînes). La longueur de ce tableau est stockée dans un argument argc .

strlen est destiné à être utilisé pour extraire la longueur de la chaîne unique qui doit être terminée par un caractère null, sinon le comportement est indéfini.

Vous ne savez pas pourquoi personne n’a suggéré de changer strlen pour faire référence à une entrée spécifique dans le tableau de pointeurs sur char?

  strlen(argv[0]) // also, 1, 2, up to (argc - 1) 

En outre, http://www.cdecl.org/ aide à confirmer que la déclaration char *argv[] est: declare argv as array of pointer to char

 int count = 0; while(argv[++count] != NULL); 

Maintenant, compter aura la longueur de argv

argv est un tableau de caractères, strlen ne prend que des chaînes. Si vous voulez obtenir la longueur de chaque argument dans argv (c’est ce que j’essayais de faire), vous devez le parcourir, en accédant aux éléments comme so argv[i][j] . Utilisation de l’argument argv[i][j] != '\0' . Si vous voulez juste le nombre d’arguments, utilisez argc .

argv est un tableau de char* . La taille de ce tableau est argc . Vous devriez passer un élément de ce tableau à strlen .

Peut-être que vous vouliez faire quelque chose comme ça:

 size_t argv_length(char** argv) { size_t ret = 0; while( *(++argv) ) ret += strlen(*argv); return ret; } 

?

argv prend une arrya de char * mais vous devez passer argc à strlen plutôt qu’à l’entier du tableau. Ensuite, vous ne recevrez aucune erreur sur strcat.

  #include  #include  #include  int main(int argc, char *argv[]){ int fir; //badly named loop variable char *input[] = calloc( strlen(argc), sizeof(char)); //initializing an array for( fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv strcat(input, argv[fir]); // appending to input } 
 //Task = get length of argv ssortingng text=*argv; //assigning charValue to ssortingng variable "text" int l=text.length(); //getting the length of the ssortingng & assigning to variale "l" //this loop just outputs result on the screen for (int i=0; i