'*' als Parameter beim Programmaufruf übertragen
-
Wie kann ich das "Sternchen" beim Aufruf unter DOS als Argument mit in das Programm übertragen?
main (int argc, char * argv[])
{
}wenn ich meine programm mit "[programmname] 3 + 5" geschweige "[programmname] fsfds dsdsgf sgdfgfthtf" aufrufe, steht der argc natürlich auf 4.
wenn ich das programm mit "[programmname] 3 * 5 " aufrufe, passiert irgendwie murks.
zählt * nicht als parameter? warum nicht?
wäre nett, wenn mir jmd weiterhelfen könnte. danke! gruß kim
-
pennyeistee schrieb:
wenn ich das programm mit "[programmname] 3 * 5 " aufrufe, passiert irgendwie murks.
Wie äußert sich denn das "passiert irgendwie murks" genau? (es könnte höchstens sein, daß DOS ein '*' als Wildcard interpretiert und irgendwie zerlegt - aber irgendwie glaube ich nicht daran)
Als Ansätze könnte ich noch empfehlen:
* schließ' das * in Anführungszeichen ein ([prog] 3 "*" 5)
* definier ein anderes Symbol als "Mal" (denkbar wäre ein kleines 'x') und pass deine Verarbeitung an
-
"murks" derart, dass eine prüfung auf argc == 4 false ist.
auch kann ich argv[2], also das *, nicht wieder ausgeben.
-
momentan verwende ich den punkt als "übergangslösung". das x käme sicher auch in frage.
würde aber aus interesse gerne wissen, welche besondere bedeutung dem * als parameter zugeordnet ist?!
danke
-
CStoll schrieb:
(es könnte höchstens sein, daß DOS ein '*' als Wildcard interpretiert und irgendwie zerlegt - aber irgendwie glaube ich nicht daran)
Öhmmm, warum glaubst du nicht daran? Ist imho recht logisch, dass die Shell/DOS-Box/CMD den * als Wildcard sieht und dann halt entsprechen mehr Parameter als "eigentlich angegeben" übergibt.
Andererseits gibt es ja tatsächlich Befehle die * direkt verwenden (z.B. das böse "net send * foobar").
Hmmmmja, interessant...
edit: die verd....... Tags
-
Hab's heute aufgrund dieses Threads mal ausprobiert, zumindest die Kommandozeile von XP übergibt Wildcards direkt an das Programm, anders als UNIX-Shells, bei denen ja zuerst Ersetzt und dann übergeben wird.
-
Also ich hab's gerade mal auch getestet (beide unter Windows 2000). Der VC7 übergibt das * direkt, der gcc (mingw) _nicht_.
Also das hätte ich nicht erwartet.
-
TactX schrieb:
CStoll schrieb:
(es könnte höchstens sein, daß DOS ein '*' als Wildcard interpretiert und irgendwie zerlegt - aber irgendwie glaube ich nicht daran)
Öhmmm, warum glaubst du nicht daran? Ist imho recht logisch, dass die Shell/DOS-Box/CMD den * als Wildcard sieht und dann halt entsprechen mehr Parameter als "eigentlich angegeben" übergibt.
Woher soll denn DOS wissen, in was der einzelne '*' aufgelöst werden soll?
@penny: Mach doch mal einen Test - was gibt das folgende Programm aus, wenn du es mit "prog 5 * 7" aufrufst?
#include <stdio.h> int main(int argc,char*argv[]) { int i; printf("%d Argumente:\n",argc); for(i=0;i<argc;++i) printf("%s\n",argv[i]); return 0 }
-
CStoll schrieb:
Woher soll denn DOS wissen, in was der einzelne '*' aufgelöst werden soll?
Unter DOS funktioniert doch auch sowas wie 'del .' oder 'deltree *' (weiss nicht, ob es deltree noch gibt), so dass der Stern auch unter DOS in die Dateien und Verzeichnisse des aktuellen Verzeichnisses expandiert zu werden scheint, oder nicht?
-
CStoll schrieb:
#include <stdio.h> int main(int argc,char*argv[]) { int i; printf("%d Argumente:\n",argc); for(i=0;i<argc;++i) printf("%s\n",argv[i]); return 0 }
Unter Windows 2000 mit MS VC++ 6.0 übernimmt er den Stern korrekt als Zeichen.
-
tim_g schrieb:
Unter DOS funktioniert doch auch sowas wie 'del .' oder 'deltree *' (weiss nicht, ob es deltree noch gibt), so dass der Stern auch unter DOS in die Dateien und Verzeichnisse des aktuellen Verzeichnisses expandiert zu werden scheint, oder nicht?
Ja, aber erst innerhalb des Programms (del ist als interner Befehl natürlich eine Ausnahme). Die Shell darf unter DOS gar keine Wildcard-Expansion durchführen, weil die Kommandozeile nur maximal ca. 128 Zeichen lang ist.