#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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". J'obtiens la même erreur pour la fonction strcat
. Elle indique également "étant donné un char **
mais attendu un 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 char
?
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 l'argument argc
.
strlen
est destiné à être utilisé pour récupérer la longueur de la chaîne unique qui doit être terminée par la valeur 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)
De plus, http://www.cdecl.org/ aide à confirmer que l'instruction 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 l'itérer, en accédant aux éléments tels que so argv[i][j]
. En utilisant l'argument argv[i][j] != '\0'
. Si vous voulez juste le nombre d'arguments, utilisez argc
.
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
est un tableau de char*
. La taille de ce tableau est argc
. Vous devriez passer un élément de ce tableau à strlen
.