Problem v prekladaci, nebo v programatorovi ?

Petr Novotny Petr.Novotny na antek.cz
Pondělí Únor 8 11:08:01 CET 1999


> 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]


Další informace o konferenci Linux