Zivjo Peter!

On Thu, 16 Mar 2000, Peter Kuhar wrote:

> > buf moram prej alocirati, vendar ne vem, kaksni bodo parametri, 
> > zato tudi ne vem, kako velik naj bo. Ker nocem alocirati spomina 
> > na nacin "char buf[20000]", bi rad vedel, ali obstaja funkcija, ki bi 
> > mi povedala, kako velik buf rabim. Po moznosti taka, da je 
> > prenosljiva tudi v druge OS. 
Ne.. tovrstnih pripomockov ni. Lahko poskusis oceniti zgornjo mejo potrate
prostora tako, da preveris vsak "format specifier".
Torej: Kar uporabi va_start in va_end ;-).

> > Ima kdo kaksno idejo?
Uporabi snprintf(..), ce bo buffer premajhen se bo pritozil. Potem lahko
poklices realloc() in poskusis znova. Realloc() bo ali povecal/zmanjsal blok
ali pa alociral nov blok in prekopiral podatke.
Realloc() ena najhitrejsih zadev kako spremeniti velikost bufferja.
Vsekakor je metoda z va_start in va_end bolj deterministicna/predvidljiva.

Se opozorilo:
---------
Because sprintf and vsprintf assume an infinitely long string, callers must be
careful not to overflow the actual space;  this is often impossible to
assure. 

-- 
best regards,
Rok Papez.

Reply via email to