Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3121 connectés 

 


Dernière réponse
Sujet : C ANSI et char *
BENB

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
BENB

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

chrisbk

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

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

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

BENB

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.

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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)