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 ?
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!