Allocation dynamique avec passage d'arguments avec main [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
30 janvier 2014
-
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Bonjour. J'aimerai bien faire de l'allocation dynamique à partir de valeurs passés en paramètres argv[1], argv[2] etc.

Ici, ce serait pour initialiser un tableau de plusieurs entiers. Le nombre "plusieurs" sera défini par agv1.

Puis, je remplit chaque case de mon tableau par une valeur définie par argv[2].

Voici le code que j'ai fait

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char* argv[]){
// Initialise mon tableau d'entier de taille choisie dans le main
int* entier=(int*)calloc(argv[1], sizeof(int));
int i;
// I va de 0 jusqu'à la taille de mon tableau
for(i=0;i<argv[1];i++){
// Mon tableau est rempli par la valeur correspondant à mon deuxième argument
entier[i] = argv[2];
printf("%d\n", entier[i]);
}
//Liberer la mémoire
free(entier);
return 0;
}

Pour l'instant, il m'affiche des warning comme quoi on ne peut pas comparer des pointeurs et des entiers et tj segmentation fault quand j'execute avec des paramètres comme 5 et 3. Tableau de 5 entiers remplis de 3.

NB: J'ai tapé mon code sous linux avec le compilateur GCC.

Si vous aviez une explication sur l'erreur ce serait sympa.
Merci

2 réponses

Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 649
bonjour,
argv[i] est une chaine de caracteres. Et ce, meme si tu mets un nombre. Il fait donc que tu convertisses la chaine en nombre avec strtol().
Cdlt,
Messages postés
4
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
30 janvier 2014

Merci.
En fait, j'avais oublié de convertir la chaine avec atoi(argv[1]).
Ca marche
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 649
oui mais je t'ai dit il faut utiliser strtol() pour convertir et non atoi() qui est obsolete.