Maison >développement back-end >C++ >Pourquoi la conversion d'un littéral de chaîne en « char* » est-elle invalide en C mais valide en C ?

Pourquoi la conversion d'un littéral de chaîne en « char* » est-elle invalide en C mais valide en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-19 22:32:12947parcourir

Why is Converting a String Literal to `char*` Invalid in C   but Valid in C?

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

Le système de types plus strict de C applique le utilisation d'un pointeur const char pour référencer des littéraux de chaîne, empêchant les modifications qui pourraient conduire à un comportement indéfini. Ceci est absent en C, où la conversion d'une chaîne littérale en 'char' est implicitement autorisée.

Pour résoudre cette incohérence, C 11 a supprimé la conversion implicite obsolète, rendant le code :

char* p = "abc";

invalide. Cependant, un cast explicite maintient la compatibilité :

char* p = (char*)"abc";

Le cast ne contourne pas le comportement sous-jacent. Il permet la conversion, mais n'empêche pas les conséquences indéfinies de la modification du littéral.

En C, la validité de cette conversion est maintenue pour des raisons de compatibilité avec le code existant. Une grande partie du code existant repose sur cette conversion implicite, ce qui rend difficile pour les comités de normalisation de rompre cette fonctionnalité sans avertissement préalable.

Par conséquent, alors que C interdit la conversion implicite pour garantir la sécurité des types, C l'autorise en raison de la prévalence de dépendance à la base de code. Cependant, il est fortement conseillé d'utiliser char const* pour les chaînes littérales dans les deux langues afin d'éviter des problèmes potentiels.

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