Problem v prekladaci, nebo v programatorovi ?

Honza Pazdziora adelton na informatics.muni.cz
Neděle Únor 7 18:06:50 CET 1999


> 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"));
> }

A co vlastne ocekavate, ze ten kod bude delat? Me se to chova naprosto
korektne: nejdriv se do toho bufferu nakopiruje aaa a vrati se pointer
na ten buffer. Pak se do toho bufferu nakopiruje bbb a vrati se ten
samy pointer. A pak se to preda printf a me to vytiskne bbbbbb, coz je
v poradku.

> Nedokazete mi nekdo poradit lepsi reseni nez:
> strcpy(zal1,fce("aaa");
> strcpy(zal2,fce("bbb");
> printf("%s%s\n",zal1,zal2);

No, pokud Vam jde jen o to, ze ta funkce ma udelat z retezce nejaky
jiny retezec, tak holt na kazdy takovy retezec si musite zaalokovat
misto a to bud v te funkci, nebo jeste pred volanim te funkce a te
funkci dat pointer na cilove misto.

Ale jak rikam, zalezi na tom, co chcete, aby ta vec delala.

------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 I just got back from vacation and started to clean my mailbox -- sorry
 if you had to wait for this email.


Další informace o konferenci Linux