Udostępnij za pośrednictwem


/Zc:strictStrings (Wyłącz konwersję typu literału ciągu)

Po określeniu kompilator wymaga ścisłej constzgodnoś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

  1. 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).

  2. Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.

  3. Zmodyfikuj właściwość Opcje dodatkowe, aby uwzględnić/Zc:strictStrings, a następnie wybierz przycisk OK.

Zobacz też

/Zc (Zgodność)