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
Libérer: 2024-12-15 12:25:15
original
295 Les gens l'ont consulté

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal