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