Allocation dynamique avec passage d'arguments avec main

Résolu/Fermé
bendecha71 Messages postés 4 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 30 janvier 2014 - Modifié par bendecha71 le 14/12/2013 à 09:31
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 déc. 2013 à 11:43
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
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
14 déc. 2013 à 10:40
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,
0
bendecha71 Messages postés 4 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 30 janvier 2014
14 déc. 2013 à 11:17
Merci.
En fait, j'avais oublié de convertir la chaine avec atoi(argv[1]).
Ca marche
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
14 déc. 2013 à 11:43
oui mais je t'ai dit il faut utiliser strtol() pour convertir et non atoi() qui est obsolete.
0