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