[linux-l] Arrays in C
Steffen Dettmer
steffen at dett.de
Fr Nov 25 15:31:35 CET 2005
* Frank Reker wrote on Tue, Nov 22, 2005 at 12:43 +0100:
> Am Mon 21. Nov 2005 23:39 +0000 schrieb Oliver Bandel:
>
> >On Mon, Nov 21, 2005 at 10:08:18PM +0100, Axel Wei wrote:
>
> [...]
> >Und weniges nur hasse ich mehr als Pfusch.
> [...]
> >Aber wenn man auf sowas hingewiesen wird, es zu gnorieren,
> >das ist dann doof.
> [...]
> >
> >> In diesem Sinn wäre
> >>
> >> if (argc <= 1){
> >> return 1;
> >> }
> >> execv(argv[1], argv + 1);
> >>
> >> sicher besser, als der blinde exec-Aufruf.
> >
> >Woher weißt Du, daß das korrekt gesetzt ist?
> >Wenn der Compiler alles so anders macht...
>
> ich weiss gar nicht weshalb du dich so aufregst. wenn obiges
> programm (nennen wir es a) als ersten parameter den namen eines
> anderen programms (b) erwartet welches (a) dann aufruft, dann
> ist die anweisung: exec (argv[1], argv+1) korrekter code.
> schau dir mal courier imap an, dort wird das genau so gemacht,
> und zwar sogar mehr als einmal: a ruft b auf, b ruft c (zweiter
> parameter) auf, ...
> es muss dann nur dokumentiert werden, was (a) an parametern erwartet.
Ja, seh ich auch so! argc zu prüfen, ist natürlich richtig, wie man
überhaupt prüft, ob die Parameter richtig sind; vielleicht sind nur eine
Anzahl von Programmen erlaubt etc.
Die verwirrende Diskussion um argv[0] hab ich immer noch nicht
verstanden. Wenn man "a b para" aufruft, um am Ende "b para" starten zu
wollen, ist doch argv[0] in beiden Fällen "korrekt" gesetzt, und zwar
auf "a" bzw. "b". Es war ja gar nicht gefordert (und ist vielleicht
sogar unerwünscht), dass "b" mit argv[0] == "a" gestartet wird.
Ich glaub, die Diskussion ging irgendwie um alles möglich andere und war
daher so lang :-)
oki,
Steffen
--
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.
Mehr Informationen über die Mailingliste linux-l