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
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
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
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 *")
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...
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"
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
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
20 mai 2010 à 23:44