strcmp zum Vergleich von LPCTSTR und String
-
10-12-2019 - |
Frage
Ich versuche in meinem C-Programm einen String und einen LPCTSTR zu vergleichen.
Folgendes habe ich bisher getan (der Code wurde auf nur das Problem vereinfacht):
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;
}
Wenn ich mein Programm mit dem ersten Parameter „Wert“ ausführe, scheint nichts davon zu sein if
werden verifiziert.Ich habe es mit versucht strcmp
Und lstrcmp
aber die Ergebnisse sind die gleichen.
Kann mir bitte jemand sagen, was ich falsch mache?
Danke.
Lösung
strcmp
und Familienrückkehr 0
um anzuzeigen, dass die Zeichenfolgen gleich sind.Deine Logik ist einfach falsch.
Sie sollten den Test so schreiben:
if (strcmp(av[i], "value")==0)
Nebenbei noch die anderen beiden if
Aussagen, Vergleich mit _T("value")
Und (LPTSTR)"value"
sind beim Kompilieren für ANSI in Ordnung, beim Kompilieren für Unicode jedoch falsch.Beim Kompilieren für Unicode _T("value")
wird zu einer breiten Zeichenfolge ausgewertet und ist daher kein gültiges Argument für strcmp
.Das ist ein Kompilierungsfehler.Und (LPTSTR)"value"
wird auch ein Kompilierungsfehler sein, weil LPTSTR
wäre eine breite Zeichenfolge.Aber auch die Besetzung wäre völlig falsch.Wie auch immer, ich erwähne diese Probleme nur der Vollständigkeit halber, aber ich verstehe, dass diese zusätzlichen if-Anweisungen hinzugefügt wurden, während Sie versuchten, das Grundproblem zu debuggen.