/Zc:strictStrings (Disable string literal type conversion)
When specified, the compiler requires strict const-qualification conformance for pointers initialized by using string literals.
/Zc:strictStrings[-]
Remarks
If /Zc:strictStrings is specified, the compiler enforces the standard C++ const qualifications for string literals, as type 'array of constchar' or 'array of constwchar_t', depending on the declaration. String literals are immutable, and an attempt to modify the contents of one results in an access violation error at run time. You must declare a string pointer as const to initialize it by using a string literal, or use an explicit const_cast to initialize a non-const pointer. By default, or if /Zc:strictStrings- is specified, the compiler does not enforce the standard C++ const qualifications for string pointers initialized by using string literals.
Use the /Zc:strictStrings option to prevent compilation of incorrect code. This example shows how a simple declaration error leads to a crash at run time:
// 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
}
When /Zc:strictStrings is enabled, the same code reports an error in the declaration of 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';
}
If you use auto to declare a string pointer, the compiler creates the correct const pointer type declaration for you. An attempt to modify the contents of a const pointer is reported by the compiler as an error.
Note
The Standard C++ Library in Visual C++ in Visual Studio 2013 does not support the /Zc:strictStrings compiler option in debug builds. If you see several C2665 errors in your build output, this may be the cause.
For more information about conformance issues in Visual C++, see Nonstandard Behavior.
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see Working with Project Properties.
Select the C/C++ folder.
Select the Command Line property page.
Modify the Additional Options property to include /Zc:strictStrings and then choose OK.