[C] Question sur l'allocation dynamique

Question sur l'allocation dynamique [C] - C - Programmation

Marsh Posté le 20-02-2007 à 15:55:20    

Bonjour à tous.
 
Je fais un petit programme en langage C et à un moment j'ai besoin de réserver de la mémoire pour un tableau Balises, de longueur nbBalises (déterminé au début du programme) qui contient des chaines de caractères de longueur fixe (15 caractères).
J'ai pensé faire :

Code :
  1. Balises=(char**)malloc(sizeof(char*)*nbBalises);


ou :

Code :
  1. Balises=(char*)malloc(sizeof(char)*nbBalises*15);


Mais je ne suis sur d'aucune des deux écritures.
Si quelqu'un peut m'aider c'est gentil.
 :hello:


---------------
"Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet" Georges Courteline
Reply

Marsh Posté le 20-02-2007 à 15:55:20   

Reply

Marsh Posté le 20-02-2007 à 16:38:02    

Bonjour :)
 
http://mapage.noos.fr/emdel/notes.htm#char_star
 
Lire : char*, char** et "bien utiliser malloc

Reply

Marsh Posté le 20-02-2007 à 16:48:26    

Merci -ThX-
 
Mon problème c'est que je ne sais pas comment allouer un tableau de "nbBalises" chaines de caractères de longueur 15.

Reply

Marsh Posté le 20-02-2007 à 17:44:30    

Lord Bab's a écrit :

Mon problème c'est que je ne sais pas comment allouer un tableau de "nbBalises" chaines de caractères de longueur 15.


Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. /* definir le type de la chaine de 15 */
  5. typedef char tab_a[15 + 1];
  6. int main (void)
  7. {
  8.    int nbBalise = 5;
  9.    /* allouer un tableau dynamiquement */
  10.    tab_a *p = malloc (nbBalise * sizeof *p);
  11.    if (p != NULL)
  12.    {
  13.       int i;
  14.       /* effacement des chaines */
  15.       for (i = 0; i < nbBalise; i++)
  16.       {
  17.          strcpy (p[i], "" );
  18.       }
  19.       /* affectation securisee de quelques chaines. */
  20.       strncat (p[1], "hello world", sizeof *p - 1);
  21.       strncat (p[3], "hello wild world", sizeof *p - 1);
  22.       /* affichage des chaines */
  23.       for (i = 0; i < nbBalise; i++)
  24.       {
  25.          printf ("%d : '%s'\n", i, p[i]);
  26.       }
  27.       /* liberation du bloc */
  28.       free (p), p = NULL;
  29.    }
  30.    return 0;
  31. }



0 : ''
1 : 'hello world'
2 : ''
3 : 'hello wild worl'
4 : ''

 

Press ENTER to continue.


Message édité par Emmanuel Delahaye le 20-02-2007 à 17:45:57

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-02-2007 à 17:22:07    

Merci beaucoup Emmanuel Delahaye. J'ai essayé et ca a l'air de marcher.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed