Salut les amis,
je veux savoir comment je peux allouer dynamiquement la mémoire pour une chaine de caractères; est-ce que je fais comme ça par exemple :
MerciCode:
1
2 char *ch; ch=(char*)malloc(sizeof(ch));
Version imprimable
Salut les amis,
je veux savoir comment je peux allouer dynamiquement la mémoire pour une chaine de caractères; est-ce que je fais comme ça par exemple :
MerciCode:
1
2 char *ch; ch=(char*)malloc(sizeof(ch));
Non, ch est un pointeur, donc sizeof ch donne la taille d'un pointeur.
Si tu écris
tu alloue un élement du type de *ch (ici un char, à noter que sizeof(char) vaut toujours 1 par définition)Code:ch=malloc(sizeof *ch);
pour en allouer N, donc un tableau de N éléments, il en faut N fois plus.
Code:ch=malloc(N*sizeof *ch);
salut diogene,
et le N comment je le déclare ?
N est une valeur entière, ou une variable entière, a toi de voir.
Merci diogene ;)
Ensuite, une bonne pratique est de tester la valeur retournée par malloc(). En effet, cette dernière retourne la valeur NULL en cas d'échec d'allocation. Cela donne le squelette suivant:
ThierryCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 char *char = NULL; size_t n = 10; /* -tc- Nombre de cases du tableau e.g. 10 */ ch = malloc(N * sizeof *ch); if (NULL != ch) { /* -tc- La suite de mon code va ici */ /* -tc- Ne pas oublier de liberer les ressources et d'affecter la valeur d'une adresse invalide testable à ch i.e. NULL */ free(ch), ch = NULL; } else { /* -tc- Erreur d'allocation: action a entreprendre */ }