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