Kommandozeilenparameter
-
Ich habe folgende Funktion:
int _tmain(int argc, _TCHAR* argv[]) { }
Wie prüfe ich, ob argv[1] "-test" entspricht?
-
Da das ein C-String ist, nimmt man da am besten
strcmp
.Aber vorher prüfen, ob es überhaupt ein argv[1] gibt.
-
Wie wandele ich "-test" in char um?
-
Mit einem Cast.
-
(char) "-test" funktioniert nicht.
-
Warum willst du ein Stringliteral in einen char wandeln?
-
Damit ich strcmp verwenden kann.
-
strcmp braucht einen Pointer für const char*, das ist "-test".
-
argv[1] 'Funktion': Inkompatible Typen - von '_TCHAR *' zu 'const char *'
-
Die Funktion (bzw. das Makro), nach dem du suchst, ist _tcscmp -- siehe http://msdn.microsoft.com/en-us/library/aa272960(v=vs.60).aspx . Vergleichen musst du dann mit _T("-test").
TCHAR ist abhängig von Präprozessormakros entweder char oder wchar_t -- das ist in MSVC irgendwo in den Projekteinstellugnen einstellbar. Abhängig von den selben Makros expandiert _tcscmp zu entweder strcmp oder wcscmp. _T("test") wird entweder "test" oder L"test". Was die Microsoft-Leute da gemacht haben, steht hier: http://msdn.microsoft.com/en-us/library/c426s321.aspx
Was sie sich dabei gedacht haben und auf welchen Drogen sie waren, wird wohl im Nebel der Geschichte verborgen bleiben.
-
seldon schrieb:
Was sie sich dabei gedacht haben und auf welchen Drogen sie waren, wird wohl im Nebel der Geschichte verborgen bleiben.
Da denke ich sofort an den Ballmer-Peak
-
-
seldon schrieb:
Was sie sich dabei gedacht haben und auf welchen Drogen sie waren, wird wohl im Nebel der Geschichte verborgen bleiben.
was sie sich dabei gedacht haben, kann man erfahren, wenn man ein bisschen weiterliest:
By using the Tchar.h, you can build single-byte, Multibyte Character Set (MBCS), and Unicode applications from the same sources.
...
The _TCHAR data type is defined conditionally in Tchar.h. If the symbol _UNICODE is defined for your build, _TCHAR is defined as wchar_t; otherwise, ...
...
-
Funktioniert leider nicht.
_tcscmp(argv[1], _T("-test"))
Der Ausdruck muss ein änderbarer Ivalue sein.
-
Keiner eine Idee?
-
Was muss ein lvalue sein?
Zeig mal ein minimales compilierbares Beispiel.
-
void _tmain(int argc, _TCHAR* argv[]) { _tcscmp(argv[1], _T("-test") }
-
Karoly schrieb:
int _tmain(int argc, _TCHAR* argv[]) { }
In welchem C-Standard wurde nochmal _TCHAR* definiert?
Ich glaube, es war Microsoft-C...
ne im Ernst, lasst doch einfach dieses Winapi-Zeugs. Davon hat am Ende keiner was:
- Typische GUI-Programme werden unter Windows meistens besser mit C++ geschrieben.
- Winapi-Benutzung bedeutet: lässt sich nur unter Windows kompilieren
- viele Funktionen aus der Winapi bietet auch die cstdlib, der Unterschied ist aber, dass die cstdlib auch für andere Plattformen implementiert ist.
-
Umstellen möchte ich nicht. Gibt es keine Möglichkeit?
-
Karoley schrieb:
void _tmain(int argc, _TCHAR* argv[]) { _tcscmp(argv[1], _T("-test") }
Wo ist das Problem?
Wenn es eins gibt, wie lautet die Fehlermeldung?
Wo sind die Includes?