C ANSI et char *

C ANSI et char * - Programmation

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
Reply

Marsh Posté le 14-11-2001 à 13:42:49   

Reply

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.

Reply

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...

Reply

Marsh Posté le 14-11-2001 à 13:55:29    

damned ...
je me suis fait devancer... :D

Reply

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 :D

Reply

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...

Reply

Sujets relatifs:

Leave a Replay

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