strcmp para comparar LPCTSTR e string
-
10-12-2019 - |
Pergunta
Estou tentando comparar no meu programa C uma string e um LPCTSTR.
Aqui está o que fiz até agora (o código foi simplificado apenas para o que é problemático):
DWORD main(DWORD ac, LPCTSTR *av)
{
DWORD cpt = 1;
while (++i < ac)
{
if (strcmp(av[i], "value"))
printf("1 : OK\n");
else if (strcmp(av[i], _T("value")))
printf("2 : OK\n");
else if (strcmp(av[i], (LPCTSTR)"value"))
printf("3 : OK\n");
}
return EXIT_SUCCESS;
}
Quando executo meu programa com o primeiro parâmetro "valor", parece que nenhum dos if
são verificados.Eu tentei com strcmp
e lstrcmp
mas os resultados são os mesmos.
Alguém pode me dizer o que estou fazendo de errado, por favor?
Obrigado.
Solução
strcmp
e retorno da família 0
para indicar que as strings são iguais.Sua lógica é simplesmente o contrário.
Você deve escrever o teste assim:
if (strcmp(av[i], "value")==0)
À parte, os outros dois if
declarações, comparando com _T("value")
e (LPTSTR)"value"
são bons ao compilar para ANSI, mas estão incorretos ao compilar para Unicode.Ao compilar para Unicode, _T("value")
será avaliado como uma string larga e, portanto, não será um argumento válido para strcmp
.Isso é um erro de compilação.E (LPTSTR)"value"
também será um erro de compilação porque LPTSTR
seria uma corda larga.Mas o elenco também seria completamente falso.De qualquer forma, estou apenas mencionando esses problemas para completar, mas entendo que essas instruções if extras foram adicionadas enquanto você tentava depurar a raiz do problema.