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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top