getenv (Re: malloc())

Pavel Kankovsky peak na kerberos.troja.mff.cuni.cz
Pátek Únor 20 12:17:27 CET 1998


On Fri, 20 Feb 1998, Ales Horak wrote:

> char *var;
> ...
> var=malloc(100);
> var=getenv("nejaka_promenna_shellu");

> tak je vse OK, ale kdyz to udelam takhle:
> 
> char var[100];
> ...
> var=getenv("nejaka_promenna_shellu");

aha tak to je skutecne chyba jinde
getenv() vraci (char *), ktery ukazuje na prostor, ktery uz byl alokovany

cili 1. reseni sice funguje, ale 100 bajtu alokovanych mallocem je
zahozeno a ztraceno, 2. reseni nejde prelozit, protoze do pole znaku
nelze priradit (z pochopitelnych pricin) ukazatel

slo by udelat:
  strcpy(var, getenv("..."));

nicmene pozor! pokud ma var fixni velikost, je to kolkovana zadost o
maler, protoze bude-li promenna delsi, dojde k nechvalne znamemu preteceni
pole a spadne to na usta (v lepsim pripade)

--Pavel Kankovsky aka Peak   [ Boycott Microsoft -- http://www.vcnet.com/bms ]



Další informace o konferenci Linux