Partager via


/Zc:strictStrings (Désactiver la conversion de type littéral de chaîne)

Quand il est spécifié, le compilateur requiert une conformité de qualification const stricte pour les pointeurs initialisés à l'aide de littéraux de chaîne.

Syntaxe

/Zc:strictStrings[-]

Notes

Si /Zc:strictStrings elle est spécifiée, le compilateur applique les qualifications C++ const standard pour les littéraux de chaîne, en tant que type « tableau de const char» ou « tableau de », en fonction de const wchar_tla déclaration. Les littéraux de chaîne sont immuables et une tentative de modification du contenu d'un de ces littéraux entraîne une erreur de violation d'accès au moment de l'exécution. Vous devez déclarer un pointeur de chaîne en tant que const pour l'initialiser en utilisant un littéral de chaîne ou utilisez un const_cast explicite pour initialiser un pointeur non const. Par défaut, ou s’il /Zc:strictStrings- est spécifié, le compilateur n’applique pas les qualifications C++ const standard pour les pointeurs de chaîne initialisés à l’aide de littéraux de chaîne.

L’option /Zc:strictStrings est désactivée par défaut. L’option /permissive- du compilateur définit implicitement cette option, mais elle peut être substituée à l’aide /Zc:strictStrings-de .

Utilisez l’option pour empêcher la /Zc:strictStrings compilation de code incorrect. Cet exemple montre comment une simple erreur de déclaration conduit à un incident au moment de l'exécution :

// strictStrings_off.cpp
// compile by using: cl /W4 strictStrings_off.cpp
int main() {
   wchar_t* str = L"hello";
   str[2] = L'a'; // run-time error: access violation
}

Lorsqu’il /Zc:strictStrings est activé, le même code signale une erreur dans la déclaration de str.

// strictStrings_on.cpp
// compile by using: cl /Zc:strictStrings /W4 strictStrings_on.cpp
int main() {
   wchar_t* str = L"hello"; // error: Conversion from string literal
   // loses const qualifier
   str[2] = L'a';
}

Si vous utilisez auto pour déclarer un pointeur de chaîne, le compilateur crée automatiquement la déclaration de type de pointeur const correcte. Une tentative de modification du contenu d'un pointeur const est signalée par le compilateur en tant qu'erreur.

Remarque

La bibliothèque C++ Standard dans Visual Studio 2013 ne prend pas en charge l’option du compilateur dans les /Zc:strictStrings builds de débogage. Si vous voyez plusieurs erreurs C2665 dans votre sortie de build, cela peut être la cause.

Pour plus d’informations sur les problèmes de conformité dans Visual C++, consultez Nonstandard Behavior.

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. Modifiez la propriété Options supplémentaires à inclure /Zc:strictStrings , puis choisissez OK.

Voir aussi

/Zc (Conformité)