Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.