[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