Maison >développement back-end >C++ >Pourquoi les conversions de chaîne littérale en `char*` sont-elles valides en C mais invalides en C ?

Pourquoi les conversions de chaîne littérale en `char*` sont-elles valides en C mais invalides en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-15 12:25:15297parcourir

Why Are String Literal to `char*` Conversions Valid in C but Invalid in C  ?

Pourquoi la conversion de chaîne littérale en 'char*' est valide en C mais invalide en C

Dans le § C.1.1 du C 11 (ISO/IEC 14882:2011), l'affectation char* p = "abc" est déclarée invalide. Cependant, cette conversion est toujours valable en C. Pourquoi est-ce le cas ?

Conversion implicite obsolète en C

Dans les versions C jusqu'à C 03, la conversion de une chaîne littérale à 'char*' était valide, bien que obsolète. Les littéraux de chaîne doivent être traités comme « char const * », car leur contenu ne peut pas être modifié sans un comportement indéfini.

La conversion explicite reste valide

Bien que la conversion implicite soit obsolète en C 11, une conversion explicite reste valable. Pour compiler le code, un cast peut être ajouté : char* p = (char*)"abc".

Inconvénients du casting

Cependant, cette conversion explicite ne "corrige" pas le code. Cela permet simplement au compilateur d'accepter la mission. Les problèmes potentiels liés à la modification du littéral de chaîne existent toujours.

Solution : utilisez le type correct

La bonne façon de gérer les littéraux de chaîne est d'utiliser le type correct, ' char const *' : char const *p = "abc". Cette approche est à la fois valide et sûre en C et en C.

Justification en C

La conversion reste valide en C car une quantité importante de code existant en dépend . Briser ce code sans avertissement approprié a été considéré comme indésirable par les comités de normalisation.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn