Compartilhar via


/Zc:strictStrings (Desativar conversão de tipo literal de cadeia de caracteres)

Quando especificado, o compilador exige conformidade rígida com qualificação de const para ponteiros inicializados com literais da cadeia de caracteres.

/Zc:strictStrings[-]

Comentários

Se /Zc:strictStrings for especificado, o compilador forçará as qualificações de const em C++ para literais da cadeia de caracteres, como o tipo 'matriz de const char' ou 'matriz de const wchar_t', dependendo da declaração. Os literais da cadeia de caracteres são imutáveis, e uma tentativa de modificar o conteúdo de um resulta em um erro de violação de acesso em tempo de execução. Você deve declarar um ponteiro da cadeia de caracteres como const para inicializá-lo usando um literal da cadeia de caracteres ou usar um const_cast explícito para inicializar um ponteiro não const. Por padrão, ou se /Zc:strictStrings- for especificado, o compilador não vai impor as qualificações de const em C++ padrão para ponteiros da cadeia de caracteres inicializados com literais da cadeia de caracteres.

Use a opção /Zc:strictStrings para evitar a compilação de código incorreto. Este exemplo mostra como um erro de declaração simples leva a uma falha em tempo de execução:

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

Quando /Zc:strictStrings está habilitado, o mesmo código relata um erro na declaração de 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'; 
}

Se você usar auto para declarar um ponteiro da cadeia de caracteres, o compilador criará a declaração do tipo de ponteiro const correta para você. Uma tentativa de modificar o conteúdo de um ponteiro const é relatada pelo compilador como um erro.

Dica

A Biblioteca Padrão C++ no Visual C++ no Visual Studio 2013 não oferece suporte à opção de compilador /Zc:strictStrings em compilações de depuração.Se você vir diversos erros C2665 na saída da compilação, essa poderá ser a causa.

Para obter mais informações sobre problemas de conformidade no Visual C++, consulte Comportamento não padrão.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, consulte Trabalhando com propriedades do projeto.

  2. Selecione a pasta C/C++.

  3. Selecione a página de propriedades de Linha de Comando.

  4. Modifique a propriedade Opções Adicionais para incluir /Zc:strictStrings e escolha OK.

Consulte também

Referência

/Zc (conformidade)