Pourquoi la conversion littérale de chaîne en 'char*' est autorisée en C mais obsolète en C
En C, il est valide d'attribuer un chaîne littérale directement vers un pointeur 'char*', comme indiqué ci-dessous :
char* p = "abc";
Cependant, en C 11 et au-delà, cette conversion implicite a été supprimée en raison de son potentiel à conduire à un comportement indéfini si la chaîne littérale est modifiée. La norme C indique explicitement au § C.1.1 que l'exemple ci-dessus n'est désormais plus valide.
Pour résoudre ce problème, C autorise une conversion explicite pour convertir une chaîne littérale en un pointeur 'char*'. Cette distribution indique clairement que le programmeur comprend les risques potentiels et accepte la responsabilité de toutes les conséquences qui pourraient survenir.
char* p = (char*)"abc"; // Valid with explicit cast
La distribution explicite en C sert à deux fins :
Cependant, il est important de noter que même avec la conversion explicite, l'attribution d'une chaîne littérale à un pointeur 'char' n'est toujours pas considérée comme une bonne pratique en C . L'approche la plus sûre consiste à utiliser un pointeur 'const char', qui indique explicitement que le littéral de chaîne ne doit pas être modifié :
char const *p = "abc"; // Valid and safe
Cela garantit que le littéral de chaîne restera inchangé, empêchant ainsi toute modification potentielle indéfinie. comportement.
En C, la conversion implicite d'une chaîne littérale en un pointeur 'char*' reste valide en raison de la grande quantité de code hérité qui repose sur ce comportement. Supprimer la conversion implicite en C aurait brisé un nombre important de programmes existants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!