J'essaie de copier les éléments individuels de argv
dans un deuxième tableau. J'utilise strncpy
pour le faire.strncpy de ** char à * char [] ne copiant pas le dernier élément
Voici une version dépouillée qui réplique le problème.
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
printf("%d\n", argc);
char *argvarray[argc];
int arrlen;
//int j;
for(int j=0; j< argc; j++){
arrlen = arrlen + strlen(argv[j]);
}
printf("size of argv: %d\n", arrlen); //see if size is right
strncpy(*argvarray, *argv, arrlen);
for(int j=0; j< argc; j++){
printf("value of j: %d\n", j); //to see what's going on
printf("%s\n", argv[j]);
printf("%s\n", argvarray[j]); //gets 1st element no problem
}
return 0;
}
Si je passe 1 arg aux principaux copies il le premier élément de argv
-argvarray
mais le second n'est pas copié. Si je passe plus de 1 argument, il se sépare sur strncpy()
.
Pourquoi cela se produit-il? Quelle est la meilleure façon de copier tous les éléments d'un tableau char (en particulier les tableaux de char déclarés dans les définitions de fonctions) vers d'autres tableaux de char sans connaître la taille avant, comme dans le cas de argv
?
suivant Vous n'allouer de la mémoire à laquelle les éléments de 'argvarray' pourraient pointer. –
'arrlen' n'est pas initialisé. –
Merci les gars, j'apprécie l'aide, et votre patience pendant que j'apprends. –