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.