Problem v prekladaci, nebo v programatorovi ?

Slavek Banko (axis) slavek.banko na axis.cz
Úterý Únor 9 11:49:34 CET 1999


Nebo static char buff[100] udělat třeba static char buff[1024] a doplnit něco
jako static short buffPos = 0. Pak by funkce při každém použití posunula
buffPos o strlen(arg) a při dosažení konce by se začalo od začátku. Zkrátka
takový malý bazén.

Kdysi jsem takové řešení použil u funkce char* text(long number), která načítala
texty ze seznamu a vracela pointer na static char.

Nicméně řešení s použitím objektů bych preferoval.

Slávek.

Dne Po, 08 únor 1999 jste napsal(a):
-->> Zdravim,
-->> dnes jsem se pokousel neco patlat v Cecku a docela me prekvapilo, ze
-->> nasledujici kod nefunguje, ac je (imho) spravne:
-->> 
-->> #include <stdio.h>
-->> char *fce(char *neco){
-->>   static char buff[100];
-->>   strncpy(buff,neco,100);
-->>   return buff;
-->> }
-->> 
-->> void main(void){
-->>   printf("%s%s\n",fce("aaa"),fce("bbb"));
-->> }
-->
-->Problem je v tom, ze kadze nasledne
-->volani fce() prepise ten staticky buffer, tj. vysledek volani fce() je
-->platny jen do okamziku, kdy je fce() znovu volana
-->
-->> Nedokazete mi nekdo poradit lepsi reseni nez:
-->> strcpy(zal1,fce("aaa");
-->> strcpy(zal2,fce("bbb");
-->> printf("%s%s\n",zal1,zal2);
-->
-->Pokud nechcete zal1 a zal2 alokovat na stacku, je tez mozno pouzit 
-->strdup()/free(). Nebo C++ a objekty jako String. :-)
-->--
-->Petr Novotny, ANTEK CS
-->Petr.Novotny na antek.cz
-->http://www.antek.cz
-->-- Don't you know there ain't no devil there's just God when he's drunk.
-->                                                             [Tom Waits]
-->
-->----------------------------------------------------------------------
-->Meta-FAQ (odhlášení, archív a další): http://www.linux.cz/mailing-list



Další informace o konferenci Linux