long lireLong()
{
char nombreTexte[100] = {0}; // 100 cases devraient suffire
if (lire(nombreTexte, 100))
{
// Si lecture du texte ok, convertir le nombre en long et le retourner
return strtol(nombreTexte, NULL, 10);
}
else
{
// Si problème de lecture, renvoyer 0
return 0;
}
}
Pour éviter de creer plusieurs tableaux sans forcément les utiliser, j'ai essayé d'appliquer les notions vues dans le chapitre allocation dynamique:
int fgetsPInt() {
char* nombreTexte = NULL;
int i;
nombreTexte = malloc(100 * sizeof(char));
if (fgetsP(nombreTexte, 100)) {
i = atoi(nombreTexte);
free(nombreTexte);
return i;
}
else
return 0;
}
Cela fonctionne, mais est-ce "propre" de faire ainsi?
Salut. sizeof(char) vaut toujours 1, donc tu peux juste écrire malloc(100). Par contre je ne vois pas en quoi ça évite de "gaspiller" de la mémoire. Ce n'est pas vraiment mauvais mais ça ne sert pas à grand chose, de plus réserver 100 octets avec malloc va en réalité utiliser bien plus de mémoire que les 100 octets demandés.
Utiliser l'allocation dynamique serait intéressant si le nombre d'éléments du tableau était donné par une variable : ainsi on pourrait allouer exactement la place nécessaire. Ici, en faisant un 'malloc' de 100 éléments, on a le même problème qu'avec un tableau de 100 éléments : on risque d'utiliser plus de mémoire que nécessaire.
C'est vrai que sizeof(char) vaut 1 mais c'est plus clair comme cela.
Non ce n'est pas plus clair puisqu'on sait que malloc alloue exactement en octet ce qui est demandé, donc tu surcharges la lecture du code avec une multiplication inutile qui sera en plus retiré par le compilateur.
Je ne comprends pas non plus le concept d'allouer dynamiquement une taille que visiblement... tu connais à la compilation : 100. Autant rester sur un tableau statique. D'autant plus que ce tableau tu ne t'en sers que dans la fonction, quel intérêt ?
git is great because Linus did it, mercurial is better because he didn't.
Question allocation dynamique
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
git is great because Linus did it, mercurial is better because he didn't.