Allocation dynamique avec passage d'arguments avec main

Résolu
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

  1. Contributeur
    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,
    1. Merci.
      En fait, j'avais oublié de convertir la chaine avec atoi(argv[1]).
      Ca marche
      1. Contributeur
        oui mais je t'ai dit il faut utiliser strtol() pour convertir et non atoi() qui est obsolete.