/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
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, consulte Trabalhando com propriedades do projeto.
Selecione a pasta C/C++.
Selecione a página de propriedades de Linha de Comando.
Modifique a propriedade Opções Adicionais para incluir /Zc:strictStrings e escolha OK.