comprendre malloc et realloc
Le
heron
Bonjour
Je débute avec le C depuis quelques mois à mon rhytme. J'arrive au
chapitre de l'allocation dynamique. J'ai abordé les tableaux uni et
multidimensionnels, les pointeurs, les fonctions.
En fait, je comprends l'utilité de malloc dans le sens ou la
réservation de la mémoire pour un tableau peut se faire en cours
d'exécution
Pour la saisie de texte, je voudrais savoir s'il serait possible de
saisir une chaîne de caractère variable avec fgets ? Je pense beaucoup
à utiliser realloc.
Par exemple : je réserve de la mémoire pour un pointeur vers une
adresse de type caractère, pour 1 ou 2 caractères et à je demande à
l'utilisateur de saisir du texte. A chaque saisie, je réserve la place
pour un caractère supplémentaire en mémoire avec realloc, c'est
faisable? Bizarement, je ne trouve aucun code qui correspond à ce que
je recherche sur le net.
Ca ressemble à peu près, mais ça ne marche pas :
http://www.cppfrance.com/forum/suje...TAILLE-VA=
RIABLE-STDIN_1405662.aspx
Autre question sans lien avec la première :
est-ce que écrire char* chaine = 0 et char *chaine = 0 revient à la
même chose?
Merci,
Je débute avec le C depuis quelques mois à mon rhytme. J'arrive au
chapitre de l'allocation dynamique. J'ai abordé les tableaux uni et
multidimensionnels, les pointeurs, les fonctions.
En fait, je comprends l'utilité de malloc dans le sens ou la
réservation de la mémoire pour un tableau peut se faire en cours
d'exécution
Pour la saisie de texte, je voudrais savoir s'il serait possible de
saisir une chaîne de caractère variable avec fgets ? Je pense beaucoup
à utiliser realloc.
Par exemple : je réserve de la mémoire pour un pointeur vers une
adresse de type caractère, pour 1 ou 2 caractères et à je demande à
l'utilisateur de saisir du texte. A chaque saisie, je réserve la place
pour un caractère supplémentaire en mémoire avec realloc, c'est
faisable? Bizarement, je ne trouve aucun code qui correspond à ce que
je recherche sur le net.
Ca ressemble à peu près, mais ça ne marche pas :
http://www.cppfrance.com/forum/suje...TAILLE-VA=
RIABLE-STDIN_1405662.aspx
Autre question sans lien avec la première :
est-ce que écrire char* chaine = 0 et char *chaine = 0 revient à la
même chose?
Merci,

Poser une question


C'est faisable, mais personne ne le fait parce que ca n'est pas efficace.
realloc a un cout non nul, du coup, on en fait moins.
Le classique, c'est de doubler la taille du tampon a chaque fois.
#include #include
int main(void)
{
char* chaine = 0 ;
char c ;
int i = 0 ;
printf("Tapez une phrase :") ;
while ( (c = getchar() ) && c != EOF )
{
++i ;
chaine = realloc(chaine, (i+1) * sizeof(char) ) ;
chaine[i-1] = c ;
chaine[i] = 0 ;
}
printf("nVous avez entre : '%s'n", chaine) ;
free(chaine) ;
return 0 ;
}
simple question : char* chaine et char *chaine c'est différent?
#include #include
int main(void)
{
int input, n ;
int cnt = 0 ;
int *numbers = NULL ;
do
{
printf("nEnter an integer value (enter 0 to stop) : ") ;
scanf("%d", &input) ;
cnt++ ;
numbers = (int *) realloc (numbers, cnt * sizeof(int) ) ;
if ( numbers == NULL )
{
puts("Error (re)allocating memory") ;
exit(1) ;
}
numbers[cnt-1] = input ;
} while ( input != 0 ) ;
printf("nNumbers entered : ") ;
for ( n = 0 ; n < cnt-1 ; n++ )
printf("n%d ", numbers[n]) ;
printf("nn") ;
return 0 ;
}
Bonjour
Il le renvoie lorsque une fin de fichier est lue.
while ( (c = getchar() ) && c != EOF && c != 'n' ) {
termine la boucle en fin de ligne et affiche le texte.
[i-1] = c ;
De le même manière que "bonnet blanc" et "blanc bonnet" sont
différents :-)
Pour le compilateur: non.
--
Eric
Il me semblait que c devait être déclaré comme int pour agir dans le
buffer avec
while ( c = getchar() != 'n' && c != EOF )
;
je pense que c'est parce que EOF renvoie -1 ...
Merci de l'info pour char* et char *