[linux-l] Arrays in C (was: SuSE 9.3 und gshadow)
Mike Dornberger
Mike.Dornberger at gmx.de
So Nov 6 01:37:43 CET 2005
Hi,
On Fri, Nov 04, 2005 at 10:44:14PM +0100, Axel Weiß wrote:
> Mike Dornberger schrieb:
> > int main(int argc, char *argv[]){
> > char *newargv[argc];
> > int i = 0;
> >
> > for (i = 1; i < argc; i++){
> > newargv[i - 1] = argv[i];
> > }
> > newargv[argc - 1] = NULL;
> >
> > execv(argv[1], newargv);
>
> Hmm, kann man hier nicht einfach
>
> execv(argv[1], argv + 1);
>
> sagen, statt das argv-Array zu kopieren?
zum einen werden da ja nur die Pointer kopiert und zum anderen weiß ich
nicht, ob argv als letztes wirklich einen NULL-Pointer enthält. Da die execs
aber zwingend einen verlangen am Ende, setze ich den lieber nochmal selbst.
Verständnisfrage: Ich hatte zuerst probiert, newargv folgendermaßen zu
initialisieren:
char *newargv[argc + 1] = { "bla", argv + 1, NULL };
aber das funktionierte nicht. (Wie) Kann man denn effizient ein Array an ein
zweites dranhängen? Noch schöner wären ja Slices (ist das jetzt der richtige
Ausdruck?), also sowas wie:
char *myarray[somesize] = { oldarray[7 to 10], "bla", "blurb", oldarray[1 to
3], "blubb" };
Vermute ich richtig, daß man dann doch nicht um for-Schleifen herumkommt?
Gruß,
Mike
Mehr Informationen über die Mailingliste linux-l