Maison >développement back-end >C++ >Pourquoi est-ce que je reçois un avertissement \'Conversion obsolète d'une chaîne littérale en \'char*\'\' en C lors de la déclaration d'un tableau de chaînes ?

Pourquoi est-ce que je reçois un avertissement \'Conversion obsolète d'une chaîne littérale en \'char*\'\' en C lors de la déclaration d'un tableau de chaînes ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 10:48:30704parcourir

Why do I get a

Conversion obsolète de la chaîne littérale en 'char*' en C

Lors de la déclaration d'un tableau de chaînes comme indiqué ci-dessous :

<code class="cpp">char *colors[4] = {"red", "orange", "yellow", "blue"};</code>

Vous pouvez rencontrer l'avertissement du compilateur : "Conversion obsolète de la chaîne littérale en 'char*'."

Comprendre l'erreur

Cette erreur provient de le fait que les chaînes fournies dans "{}" sont des chaînes littérales, définies dans le code du programme lui-même. Par défaut, les chaînes littérales sont immuables, ce qui signifie que vous ne pouvez pas modifier leur contenu au moment de l'exécution, par exemple en écrivant sur leurs pointeurs.

Déclarer le tableau avec des pointeurs vers des caractères le rend sujet aux erreurs d'exécution si vous essayez d'écrire dans l'entrée d'origine ("rouge", "orange", etc.). Cela pourrait accidentellement modifier les chaînes d'origine, conduisant à des résultats imprévisibles.

Solution non obsolète

Pour résoudre ce problème et éviter d'éventuelles erreurs d'exécution, vous devez déclarer le tableau comme pointeurs const vers des caractères.

<code class="cpp">const char *colors[4] = {"red", "orange", "yellow", "blue"};</code>

En ajoutant le mot-clé const, vous vous assurez que les chaînes sont immuables et ne seront pas modifiées involontairement.

Considérations relatives à la modification des valeurs

Si vous prévoyez la nécessité de modifier les valeurs de chaîne au moment de l'exécution, vous pouvez copier les littéraux de chaîne dans un tableau séparé ou utiliser des mécanismes comme strtok() pour manipuler les caractères individuels.

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