2017-02-11 1 views
0

Une déclaration comme ceci:C Langage - Les chaînes initialisées statiques sont-elles const par défaut?

char* string = "Test"; 

Est-ce que certains porte const implicitement?

Je veux savoir si les prochains exemples ont un sens ou non.

const char* string = "Test"; 
char* const string = "Test"; 
const char* const string = "Test"; 
+0

C99 - _6.4.5: Pour les littéraux de chaîne de caractères, les éléments du tableau ** ont type char **, et sont initialisés avec les octets individuels du séquence de caractères multi-octets; mais d'autre part: _Si le programme tente de modifier un tel tableau, le comportement est indéfini. –

Répondre

2
char* string = "Test"; 

Ne fais pas ça. Cela devrait donner un avertissement parce que c'est vraiment une chaîne statique, mais ce n'est pas le cas. Si vous écrivez à la chaîne, elle explosera.

const char* string = "Test"; 

Correct.

char* const string = "Test"; 

Non correct. Cela signifie que le pointeur string ne peut pas changer mais son contenu peut, ce qui n'est pas très utile en plus d'être faux.

const char* const string = "Test"; 

Correct. Maintenant, ni le pointeur string ni son contenu ne peuvent changer. Je dérange rarement avec const sur le côté droit d'un * mais il a ses utilisations.

Si vous voulez vraiment une chaîne inscriptible utiliser

char string[] = "Test"; 
+0

Qu'est-ce qui ne va pas avec 'char * string =" Test ";' ??? C'est une déclaration parfaitement légale d'une chaîne constante. Il ne provoque aucun avertissement même lorsqu'il est compilé avec les drapeaux les plus stricts. – DyZ

+1

La durée de stockage d'une chaîne (ou d'un autre objet) n'a aucune incidence sur le fait que 'const' doit lui être associé –

+0

' char * const string = "Test"; 'est correct selon la norme C –