/Zc:strictStrings (Konvertierung des Zeichenfolgenliteraltyps deaktivieren)

Wenn dies angegeben wird, benötigt der Compiler eine strenge const-Qualifikationsübereinstimmung für Zeiger, die mithilfe von Zeichenfolgenliteralen initialisiert werden.

Syntax

/Zc:strictStrings[-]

Hinweise

Wenn /Zc:strictStrings angegeben, erzwingt der Compiler die C++ const -Standardqualifikationen für Zeichenfolgenliterale als Typ "Array von const char" oder "Array von const wchar_t", abhängig von der Deklaration. Zeichenfolgenliterale sind unveränderlich. Der Versuch, den Inhalt von einem von ihnen zu ändern, führt zu einem Zugriffsverletzungsfehler in der Laufzeit. Sie müssen einen Zeichenfolgenzeiger als const deklarieren, um ihn mithilfe eines Zeichenfolgenliterals zu initialisieren, oder sie müssen eine explizite const_cast verwenden, um einen Zeiger zu initialisieren, der nicht const ist. Der Compiler erzwingt standardmäßig nicht /Zc:strictStrings- die C++ const -Standardqualifikationen für Zeichenfolgenzeiger, die mithilfe von Zeichenfolgenliteralen initialisiert werden.

Die /Zc:strictStrings Option ist standardmäßig deaktiviert. Die /permissive- Compileroption legt diese Option implizit fest, kann jedoch mithilfe /Zc:strictStrings-von . überschrieben werden.

Verwenden Sie die /Zc:strictStrings Option, um die Kompilierung falscher Code zu verhindern. Dieses Beispiel zeigt, wie ein einfacher Deklarationsfehler zu einem Absturz während der Laufzeit führt:

// 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
}

Wenn /Zc:strictStrings diese Option aktiviert ist, meldet derselbe Code einen Fehler in der Deklaration von 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';
}

Wenn Sie auto verwenden, um einen Zeichenfolgenzeiger zu deklarieren, erstellt der Compiler die richtige const Zeigertypdeklaration für Sie. Ein Versuch, den Inhalt eines const-Zeigers zu ändern, wird vom Compiler als Fehler gemeldet.

Hinweis

Die C++-Standardbibliothek in Visual Studio 2013 unterstützt die /Zc:strictStrings Compileroption in Debugbuilds nicht. Wenn in Der Buildausgabe mehrere C2665-Fehler angezeigt werden, kann dies die Ursache sein.

Weitere Informationen über Konformitätsprobleme in Visual C++ finden Sie unter Nonstandard Behavior.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.

  3. Ändern Sie die Eigenschaft "Zusätzliche Optionen", um sie einzuschließen/Zc:strictStrings, und wählen Sie dann "OK" aus.

Siehe auch

/Zc (Konformität)