On Thu, 16 Mar 2000, you wrote:
> Zivjo!
> 
> Rad bi v splosnem resil tale problem: imam nek buffer, v katerega s 
> sprintf napisem nek string - takole:
> 
> sprintf(buf,"...",a,b,...);
> 
> 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. 
> 
> Ima kdo kaksno idejo?
> 
> Sicer se bom pac lotil tega z va_start, va_end in podobnim, ampak 
> mi ne disi prevec.
> 
> LP!
> 
> Anze

z va_start, va_end in podobnim  je zadeva kar dolga.
Bolje je da najprej rezerviras buffer ki je becji od potrebnega.
npr: 
char *buff;
char *temp=new char[10000];
//potem vpises v buffer
sprintf(temp,"%d %f .....",a,b,.....);
//rezerviras ta svoj buf na potrebno velikost
buff=new char[strlen(temp)+1];//+1 je za EOF ki je na koncu stringa
//prekopiras zacasni buffer v svoj buffer
strcpy(buf,temp);
//potem pa lahko *temp ki je verjetno veliko prevelik sprostis
delete temp;

ce uporabljas ta buffer v funkciji in ni globalna spremenljivka moras pred
izhodom iz funkcije narediti se kak  delete buf; da se se ta pomnilnik sprosti.
V nasprotnem primeru bos mel eno crno luknjo, ki jo je pozneje tezko najti;   

Pa se nekaj. Ce v ta svoj buf v funkciji veckrat pises vsakic preden naredis
buf=new char[...];  sprosti spomin ki je bil prej rezerviran z  delete buf;
vendar ne pred prvo rezervacijo spomina ker bos mel segfault.(lahko pa na vrhu
funcije nastavis buf na NULL (char *buf=null))

new in delete se uporabljata v C++ ce delas s C-jem pac uporabi malloc(..) in
free

LP

PeRo

Reply via email to