Exercice allocation dynamique
Fermé
memel
-
6 juin 2015 à 18:50
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 juin 2015 à 16:57
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 juin 2015 à 16:57
A voir également:
- Exercice allocation dynamique
- Tableau croisé dynamique - Guide
- Liste déroulante dynamique excel - Guide
- Liste déroulante dynamique en cascade excel - Guide
- Sommaire dynamique word - Guide
- Excel tableau croisé dynamique pourcentage entre 2 colonnes ✓ - Forum Excel
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
6 juin 2015 à 21:43
6 juin 2015 à 21:43
Bonjour,
Déjà, tu n'utilises pas BUFSIZE...
void ex6()
Il faut à minima, une fonction main().
Donc mets plutôt :
Et n'oublie pas de rajouter :
char* tab;
C'est un pointeur. L'énoncé parle de tableau de pointeur. Donc plutôt :
tab = (char*)malloc( 10 * sizeof(char) );
Ce n'est pas ce qui est demandé. Donc à supprimer.
Il manque la déclaration d'un buffer. Par exemple :
scanf("%c", &tab[i]);
Cela permet la saisie d'un caractère, pas d'une chaîne de caractères. Il faut plutôt mettre :
Ensuite, il faut recopier allouer tab[i] avec le nombre de caractères de buffer +1 (pour le '\0'). Pour compter le nombre de caractères, tu as la fonction strlen(). Après, il faudra recopier la chaîne buffer dans tab[i]. Pour cela, tu as la fonction strcpy() (ou strncpy() pour sa version sécurisée).
for (n=0;n<i;n++)
Pourquoi n<i ? Mets plutôt : n<10; ça revient au même, mais c'est plus parlant. D'ailleurs, tu peux même réutiliser i.
Pour libérer la mémoire, il faut utiliser la fonction free(); Par exemple :
Bon courage,
Cdlt,
Déjà, tu n'utilises pas BUFSIZE...
void ex6()
Il faut à minima, une fonction main().
Donc mets plutôt :
int main(void)
Et n'oublie pas de rajouter :
return 0;en fin de main().
char* tab;
C'est un pointeur. L'énoncé parle de tableau de pointeur. Donc plutôt :
char *tab[10];
tab = (char*)malloc( 10 * sizeof(char) );
Ce n'est pas ce qui est demandé. Donc à supprimer.
Il manque la déclaration d'un buffer. Par exemple :
char buffer[...];(à toi de remplacer les ... par ce qu'il faut).
scanf("%c", &tab[i]);
Cela permet la saisie d'un caractère, pas d'une chaîne de caractères. Il faut plutôt mettre :
scanf("%s", buffer);
Ensuite, il faut recopier allouer tab[i] avec le nombre de caractères de buffer +1 (pour le '\0'). Pour compter le nombre de caractères, tu as la fonction strlen(). Après, il faudra recopier la chaîne buffer dans tab[i]. Pour cela, tu as la fonction strcpy() (ou strncpy() pour sa version sécurisée).
for (n=0;n<i;n++)
Pourquoi n<i ? Mets plutôt : n<10; ça revient au même, mais c'est plus parlant. D'ailleurs, tu peux même réutiliser i.
Pour libérer la mémoire, il faut utiliser la fonction free(); Par exemple :
free(tab[i]);. N'oublie pas de faire une boucle for().
Bon courage,
Cdlt,
void ex6()Le code n'est pas fini, mais j'en suis arrivé la !
{
int i;
int n;
char *tab[10];
char buffer[(-> nombre de caractere pour chaque fois a calculer avec strlen )];
int x;
for ( i=0; i<10; i++ )
{
printf("Phrase %d : ", i);
scanf("%s", buffer);
x=strlen(buffer);
printf("%d\n",x);
}
for (n=0;n<10;n++)
printf("%s\n",buffer);
//Boucle a faire
//free(tab[i]);
}
int main(int argc, const char * argv[]) {
//exo11();
//exo12();
//exo13();
//exo2();
//exo5();
ex6();
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
7 juin 2015 à 16:57
7 juin 2015 à 16:57
char buffer[(-> nombre de caractere pour chaque fois a calculer avec strlen )];
Non. buffer a une taille fixe. Relis ton énoncé ;-).
D'ailleurs, tu as oublié de mettre au début :
x=strlen(buffer);
printf("%d\n",x);
À la place du printf(), il faudrait plutôt recopier la taille dans le tableau. Pour cela, il faut utiliser strcpy()/strncpy(). cf. post précédent.
for (n=0;n<10;n++)
printf("%s\n",buffer);
Dommage de laisser n comme choix de variable... Sinon printf(..., buffer) n'est pas bon. Il faut afficher les phrases stockées dans le tableau.
//Boucle a faire
//free(tab[i]);
Oui, il faut fairre ;-).
Cdlt,
Non. buffer a une taille fixe. Relis ton énoncé ;-).
D'ailleurs, tu as oublié de mettre au début :
#define BUFSIZ 128(tu mets la taille que tu veux).
x=strlen(buffer);
printf("%d\n",x);
À la place du printf(), il faudrait plutôt recopier la taille dans le tableau. Pour cela, il faut utiliser strcpy()/strncpy(). cf. post précédent.
for (n=0;n<10;n++)
printf("%s\n",buffer);
Dommage de laisser n comme choix de variable... Sinon printf(..., buffer) n'est pas bon. Il faut afficher les phrases stockées dans le tableau.
//Boucle a faire
//free(tab[i]);
Oui, il faut fairre ;-).
Cdlt,