[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