[linux-l] Arrays in C

Mike Dornberger Mike.Dornberger at gmx.de
Do Nov 10 14:49:08 CET 2005


Hi,

On Sun, Nov 06, 2005 at 09:31:09AM +0100, Axel Weiß wrote:
> Mike Dornberger schrieb:
> > Verständnisfrage: Ich hatte zuerst probiert, newargv folgendermaßen zu
> > initialisieren:
> >
> > char *newargv[argc + 1] = { "bla", argv + 1, NULL  };
> 
> Das Geht nicht. "bla" ist vom Typ char*, argv + 1 vom Typ char**, und die 
> kannst Du mal nicht so einfach zusammen aufzählen.

ja, daß wußte ich, dachte aber, daß der Compiler hier evt. ein wenig
"mitdenkt" und neben dem Pointer auf "bla" alle Pointer von argv + 1 kopiert
und dann noch einen NULL-Pointer anfügt. Naja, muß man wohl doch recht
umständlich mit for oder while machen, wenn man anhängen (oder einfügen)
will.

> > 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"  };
> 
> In C kannst Du String*konstanten* aneinanderhängen:
> 
> "bla" "blurb" gibt zusammen "blablurb". Wirklich brauchen kann man sowas 

Ich weiß jetzt nicht genau, ob Du das verstanden hast, was ich meint. Ich
will da kein "blablurb" haben, sondern die ersten 4 Elemente von myarray
sollen die 7. - 10. von oldarray sein, dann ein Pointer auf bla, dann einer
auf "blurb", dann 1. bis 3. Element von oldarray und dann Pointer auf
"blubb".

> eigentlich nur in Makros, die Strings zusammensetzen. Wenn ich z.B. den 
> gcc voraussetze (nur der hat ein __FUNCTION__), sieht mein 
> Standard-Ausgabemakro etwa so aus:
> 
> #define DEBUG(fmt, args...) \
>    fprintf(stderr, "%s: " fmt "\n", __FUNCTION__, ##args)
> 
> Der neue Formatstring wird jetzt zusammengesetzt und die Funktion, aus 
> der das Makro aufgerufen wird, mit ausgegeben.

OK, hier verstehe ich jetzt nicht, was Du meinst.

> Wie gesagt, das geht nur mit Konstanten. Sowas wie oldarray[7 to 10] gibt 
> es in C schonmal gar nicht (wo soll das im Speicher liegen?).

Na ganz einfach: Das ist das Array (bzw. die Liste von Elementen), was bei
oldarray + 7 anfängt und bis oldarray + 10 geht. ;-) Wäre halt nett gewesen,
wenn der Präprozessor oder Compiler aus oldarray[1 to 3] die Elemente-Liste
oldarray[1], oldarray[2], oldarray[3] gemacht hätte. Nur, damit ich daß
nicht selber bei der Deklaration von myarray in das { } - Paar schreiben muß
oder mich eben irgendwelcher Loops bedienen muß.

Gruß,
 Mike



Mehr Informationen über die Mailingliste linux-l