#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