Exercices langage C fonction malloc et l'opérateur sizeof

Ecrire un programme qui lit 10 phrases d'une longueur maximale de 200 caractères au clavier et qui les mémorise dans un tableau de pointeurs sur char en réservant dynamiquement l'emplacement en mémoire pour les chaînes. Ensuite, l'ordre des phrases est inversé en modifiant les pointeurs et le tableau résultant est affiché.


Corrigé exercices langage C fonction malloc et l'opérateur sizeof

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
 /* Déclarations */
 char INTRO[500]; /* chaîne pour l'introduction des données   */
 char *TEXTE[10]; /* Tableau des pointeurs sur les 10 chaînes */
 char *PAIDE; /* pointeur d'aide pour l'échange des pointeurs */
  int I,J;     /* indices courants */
 /* Saisie des données et allocation dynamique de mémoire */
 puts("Introduire 10 phrases terminées chaque fois"
      " par un retour à la ligne :");
 for (I=0; I<10; I++)
     {
      /* Lecture d'une phrase */
      printf("Phrase %d : ",I);
      gets(INTRO);
      /* Réservation de la mémoire */
      TEXTE[I] = malloc(strlen(INTRO)+1);
      /* S'il y a assez de mémoire, ... */
      if (TEXTE[I])
           /* copier la phrase à l'adresse */
           /* fournie par malloc,          */
           strcpy(TEXTE[I], INTRO);
      else
          {
           /* sinon afficher un message d'erreur */
           printf("\aPas assez de mémoire \n");
           /* et quitter le programme. */
           exit(-1);
          }
      }
 /* Afficher le tableau donné */
 puts("Contenu du tableau donné :");
 for (I=0; I<10; I++)   puts(TEXTE[I]);
 /* Inverser l'ordre des phrases avec le pointeur PAIDE */
 for (I=0,J=9 ; I<J ; I++,J--)
     {
      PAIDE    = TEXTE[I];
      TEXTE[I] = TEXTE[J];
      TEXTE[J] = PAIDE;
     }
  /* Afficher le tableau résultat */
 puts("Contenu du tableau résultat :");
 for (I=0; I<10; I++)   puts(TEXTE[I]);
 return 0;
}