Question

J'essaie de comparer dans mon programme C une chaîne et un LPCTSTR.

Voici ce que j'ai fait jusqu'à présent (le code a été simplifié pour ne contenir que ce qui pose problème) :

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

Lorsque j'exécute mon programme avec le premier paramètre "value", il apparaît qu'aucun des paramètres if sont vérifiées.j'ai essayé avec strcmp et lstrcmp mais les résultats sont les mêmes.

Quelqu'un peut-il me dire ce que je fais de mal s'il vous plaît ?

Merci.

Était-ce utile?

La solution

strcmp et retour de la famille 0 pour indiquer que les chaînes sont égales.Votre logique est tout simplement à l’envers.

Vous devriez écrire le test comme ceci :

if (strcmp(av[i], "value")==0)

En passant, les deux autres if déclarations, en comparant avec _T("value") et (LPTSTR)"value" conviennent lors de la compilation pour ANSI, mais sont incorrects lors de la compilation pour Unicode.Lors de la compilation pour Unicode, _T("value") sera évalué comme une chaîne large et ne sera donc pas un argument valide pour strcmp.C'est une erreur de compilation.Et (LPTSTR)"value" sera également une erreur de compilation car LPTSTR serait une large chaîne.Mais le casting serait également complètement faux.Quoi qu'il en soit, je mentionne simplement ces problèmes par souci d'exhaustivité, mais je comprends que ces instructions if supplémentaires ont été ajoutées pendant que vous essayiez de déboguer la racine du problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top