Kommandolzeilenargumente auswerten

20/10/2008 - 22:01 von Thomas Steinbach | Report spam
Hallo NG,

ich poste hier ein Problem das ich gerade nicht ganz verstehe.
Ich will in meinem Programm das zweite Kommandozeilenargument
nutzen. Dies soll quasi ein Searchpattern, nach dem ich dann
im Programm nach Dateien suchen will sein.

Komischerweise wird mir aber das Pattern irgendwie
als Dateiliste bereits ausgewertet. Wenn ich explizit
das zweite Argument ausgeben will, bekomme ich
aber das erste element dieser Liste statt dem Argument
(hier *.*) selber.

snip
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR * argv[])
{
LPTSTR lpCmdLine = NULL;
TCHAR szVec[MAX_PATH] = _TEXT("");
int i = 0;

lpCmdLine = GetCommandLine();

_tprintf(" CommandLine is: %s", lpCmdLine);

for(i=0; i<argc; i++) {
strcat(szVec, argv[i]);
strcat(szVec, " ");
i++;
}
_tprintf(" CommandLine is: %s", szVec);

_tprintf(" 1st Parameter is: %s", argv[1]);

_tprintf(" 2nd Parameter is: %s", argv[2]);

return 0;
}

snap

wenn ich jetzt eingebe:

example.exe *.*

bekomme ich ein:

snip
CommandLine is: example.exe *.*

CommandLine is: example.exe test.txt

1st Parameter is: example.exe

2nd Parameter is: test.txt
snap

Wie kommt das und wie greife ich auf "mein"
Pattern zu... also auf das "*.*"?

Funktioniert das irgendwie mit Doppelzeigern?
Meine Versuche scheitern momentan alle...

Thomas
 

Lesen sie die antworten

#1 Stefan Reuther
20/10/2008 - 23:21 | Warnen spam
Thomas Steinbach wrote:
Komischerweise wird mir aber das Pattern irgendwie
als Dateiliste bereits ausgewertet. Wenn ich explizit
das zweite Argument ausgeben will, bekomme ich
aber das erste element dieser Liste statt dem Argument
(hier *.*) selber.



Schau mal in den Compilereinstellungen nach. Beim Borland-Compiler ist
es so, dass standardmàßig dein gewünschtes Verhalten verwendet wird,
wenn man aber "wildargs.obj" dazulinkt, werden in argv[] die Wildcards
expandiert.

Hintergrund ist wohl, dass Programme aus der Unix-Welt erwarten, dass
die Shell ihnen die Wildcards expandiert. Und Windows-Programme haben ja
keine main, sondern eine WinMain :-)


Stefan

Ähnliche fragen