[linux-l] Arrays in C (was: SuSE 9.3 und gshadow)

Oliver Bandel oliver at first.in-berlin.de
Do Nov 10 01:22:05 CET 2005


On Wed, Nov 09, 2005 at 11:02:19PM +0100, Steffen Dettmer wrote:
> * Oliver Bandel wrote on Sun, Nov 06, 2005 at 11:54 +0100:
> > On Sun, Nov 06, 2005 at 09:15:26AM +0100, Oswald Buddenhagen wrote:
> > [...]
> > > dynamisch gesize-te arrays sind eine gcc-spezifische spracherweiterung.
> > [...]
> > 
> > Nö, ist wohl auch in C99 drin.
> 
> Ach, echt?

gerüchteweise... ;-)

Bin mit C99 nicht sehr versiert,
müsste ich also nochmal nachlesen.


[...]
> 
> > > oder alloca, aber aufpassen
> 
> ist zwar ANSI oder ISO oder keine Ahnung,

ANSI ist ja ISO bzw. ISO ist ANSI, aber da muß man aufpassen,
welches ISO denn gemeint ist (damit es ANSI ist). ;-)


> irgendwas jedenfalls, aber
> auch nicht immer da, z.B. auf "meiner" embedded Platform nicht. just

Naja, wenn die Embedded-Plattform (bzw. der Compiler/die Libs)
nur Mogel-C anbietet... ;-)

> BTW.
> 
> Geht denn nu:
> 
> 	execv(argv[1], argv + 1);
> 
> eigentlich?

In welchem Sinne meinst Du, ob es geht?

Vom Typ her geht es schon, aber weder hält es sich an gängige Konventionen
(argv[0] soll dem Namen des aufgerufenen Programms entsprechen), noch
wird es sinnvoll funktionieren für jedes Argument.

Das zweite Argument in execv(), also das argv-Argument
muß mindestens einen gültigen Wert enthalten.
Das bedeutet aber, wenn man bei dem Aufruf von execv()
argv+1 als zweites Argument übergibt, dieser aber (wenn
zu wenige (keine) Argumente an die aufrufende Funktion
übergeben wurden), gleich an der Stelle (eben an "argv+1")
schon NULL enthält, dann kracht es.

Man sollte sowas also nicht schreiben - auch wenn der
Typ passt.


Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l