/Zc:strictStrings
(Wyłącz konwersję typu literału ciągu)
Po określeniu kompilator wymaga ścisłej const
zgodności kwalifikacji dla wskaźników zainicjowanych przy użyciu literałów ciągu.
Składnia
/Zc:strictStrings
[-
]
Uwagi
Jeśli /Zc:strictStrings
zostanie określony, kompilator wymusza standardowe kwalifikacje języka C++ const
dla literałów ciągów, jako typ "tablica const char
" lub "tablica const wchar_t
" w zależności od deklaracji. Literały ciągu są niezmienne i próba zmodyfikowania zawartości jednego powoduje błąd naruszenia dostępu w czasie wykonywania. Należy zadeklarować wskaźnik const
ciągu, aby zainicjować go przy użyciu literału ciągu lub użyć jawnego const_cast
w celu zainicjowania wskaźnika inicjalizacjiconst
. Domyślnie lub jeśli /Zc:strictStrings-
jest określony, kompilator nie wymusza standardowych kwalifikacji języka C++ const
dla wskaźników ciągów zainicjowanych przy użyciu literałów ciągu.
Opcja /Zc:strictStrings
jest domyślnie wyłączona. Opcja kompilatora /permissive-
niejawnie ustawia tę opcję, ale można ją zastąpić przy użyciu polecenia /Zc:strictStrings-
.
/Zc:strictStrings
Użyj opcji , aby zapobiec kompilacji nieprawidłowego kodu. W tym przykładzie pokazano, jak prosty błąd deklaracji prowadzi do awarii w czasie wykonywania:
// 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
}
Po /Zc:strictStrings
włączeniu ten sam kod zgłasza błąd w deklaracji 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';
}
Jeśli używasz auto
do deklarowania wskaźnika ciągu, kompilator tworzy prawidłową const
deklarację typu wskaźnika. Próba zmodyfikowania zawartości const
wskaźnika jest zgłaszana przez kompilator jako błąd.
Uwaga
Biblioteka Standardowa języka C++ w programie Visual Studio 2013 nie obsługuje opcji kompilatora /Zc:strictStrings
w kompilacjach debugowania. Jeśli w danych wyjściowych kompilacji zostanie wyświetlonych kilka błędów C2665 , przyczyną może być.
Aby uzyskać więcej informacji na temat problemów ze zgodnością w programie Visual C++, zobacz Zachowanie niezgodne.
Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.
Zmodyfikuj właściwość Opcje dodatkowe, aby uwzględnić
/Zc:strictStrings
, a następnie wybierz przycisk OK.