Language c

Fermé
brain2 Messages postés 12 Date d'inscription mardi 23 mars 2010 Statut Membre Dernière intervention 26 juillet 2010 - 20 mai 2010 à 18:27
brain2 Messages postés 12 Date d'inscription mardi 23 mars 2010 Statut Membre Dernière intervention 26 juillet 2010 - 20 mai 2010 à 23:44
Bonjour,

Bonjour, je veux savoir la signification de cette ligne

comb = (char *)malloc((lg)*sizeof(char)+1);


SVP c urgent , je ss debutant en c

1 réponse

SchSoftware Messages postés 46 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 17 avril 2011 3
20 mai 2010 à 22:34
Bonsoir

Donc pour l'explication (Je complète par quelques lignes...)


Dans cette ligne est déclaré un pointer de type "char" (ou, pour faire plus court: "char *")
char *comb = NULL;

Le but final est de pouvoir lire/écrire plusieurs variables de type "char"
On peu facilement déduite ici que ce sera une chaine de texte...

Par contre, en l'état, cette variables est inutilisable car elle n'est pas allouer (rappel, un pointer indique une adresse en mémoire...)
Hors ici, elle est NULL

Il faut donc l'initialiser/l'allouer afin de pouvoir c'en servir...
C'est le but de votre ligne...
comb = (char *)malloc((lg)*sizeof(char)+1);

Cette ligne vas préparer la variable (lui assigner un espace mémoire.) à l'aide de la fonction malloc (Memory ALLOCate)

Pour les détailles c'est asse simple...
comb = (char *)malloc((lg)*sizeof(char)+1);

... = (char *)
La fonction malloc renvoie une valeur de type "void *", hors, nous souhaitons l'assigner a un "char *", il faut donc CASTER (transformer un type en un autre, pour faire court) la valeur retourner
C'EST LE BUT DE CETTE LIGNE...

malloc((lg)*sizeof(char)+1)
Ici, nous indiquons a la fonction malloc de combien de mémoire nous avons besoin!
Soit "lg" (un nombre j'imagine) fois la taille de UNE variable de type "char" (sizeof(char)), logique, on veux allouer un "char *"
A cette taille est rajouter 1 ( + 1) qui (je pense) sera mis à zéro.

Appelons ça une marge de sécurité... Asse commune quand on alloue de la mémoire pour une chaine de texte (en effet de nombreuse fonction demande des chaine de texte terminer par un '0' (null terminated)

Par contre, la logique voudrais que l'on place le "+ 1" juste après le "lg"
comb = (char *)malloc((lg + 1) * sizeof(char));

Plus prudent. Car il faut UN caractère de plus pour le "0" de fin de chaine, non pas de fin de mémoire (Ici, vue que sizeof(char) vaut 1, ca ne change rien mais c'est une bonne habitude à prendre...)

Voila, j'espère avoir été asse clair et vous avoir aider un peu

Bien à vous
1
brain2 Messages postés 12 Date d'inscription mardi 23 mars 2010 Statut Membre Dernière intervention 26 juillet 2010 3
20 mai 2010 à 23:44
merci SchSoftware votre explication m'a été très utile
0