[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