C ANSI et char * - Programmation
Marsh Posté le 14-11-2001 à 13:50:12
Combi_A_Vendre a écrit a écrit : Quand en C ANSI on fait ça : char *c; c="zoubouroumouk"; Si on veux ré-afecter c, on doit faire un free et un malloc ? vw. |
ben non... pas de free...
ta chaine literrale elle est statique, tu ne l'a pas allouee dynamiquement... donc pas de free...
ensuite la reaffectation de c...
ben ca depend, si tu lui reaffecte une chaine deja existant pas besion d'allouer par un malloc.
Marsh Posté le 14-11-2001 à 13:54:09
Combi_A_Vendre a écrit a écrit : Quand en C ANSI on fait ça : char *c; c="zoubouroumouk"; Si on veux ré-afecter c, on doit faire un free et un malloc ? vw. |
euh... la tu n'as rien affecté du tout. ta variable c pointe sur une chaine temporaire qui sera ecrasée peut après la srtie de la fonction...
Eventuellement tu peux faire:
char c[] = "zoubouroumouk";
le mieux, c'est en effet:
char * c;
c = (char *) malloc(strlen("zoubouroumouk" )+1);
strcpy(c, "zoubouroumouk" );
quoi qu'il en soit, avec ce que tu as fait, tu ne DOIT PAS faire de free puisque tu n'as pas fait de malloc avant...
Marsh Posté le 14-11-2001 à 14:09:24
SoWhatIn22 a écrit a écrit : le mieux, c'est en effet: char * c; c = (char *) malloc(strlen("zoubouroumouk" )+1); strcpy(c, "zoubouroumouk" ); |
c = strdup("zoubouroumouk" );
est quand meme plus elegant
Marsh Posté le 14-11-2001 à 14:22:31
SoWhatIn22 a écrit a écrit : euh... la tu n'as rien affecté du tout. ta variable c pointe sur une chaine temporaire qui sera ecrasée peut après la srtie de la fonction... |
la variable c sera ecrasee, pas la chaine...
c'est une literrale... en qq sortes un variable globale...
d'ailleurs une modification de cette chaine te le montrera...
car elle restera modifiee jusqu'a la fin du prog... (ou la prochaine modif...
souvent on conseille des les ecrire plutot sous la forme
const char c[]="tototo";....
le const protegant la litterale (c ici) de la modification...
Marsh Posté le 14-11-2001 à 13:42:49
Quand en C ANSI on fait ça :
char *c;
c="zoubouroumouk";
Si on veux ré-afecter c, on doit faire un free et un malloc ?
vw.
---------------
The best way to accelerate a computer running windows is at 9.8m.s-2