On Tuesday 26 August 2003 13:50, Dorin Lazar wrote:
> On Tuesday 26 August 2003 10:39, Serghei Amelian wrote:
> > Hmm, de ce conteaza? Din cate stiu eu "return buffer" este sinonim cu
> > "return &buffer[0]", asa ca unde e problema? Poti sa-mi dai un exemplu
> > unde ar avea importanta chestia asta?
>
>   Diferenta este locul unde se aloca memoria. char buffer[512] o sa il ai
> alocat pe stiva, sau static (daca e in afara contextului vreunei functii.
>   Daca ai intr-o functie:
> const char *func(void)
> {
> char buffer[1023];
> return buffer;
> }
>
>   Asta e un dezastru waiting to happen. (dar stiai asta, nu?)

In cazul asta e un dezastru imediat dupa return. Insa daca pui static in fata 
la "char buffer" e ok.

>   Cand trimiti ca parametru la o functie care primeste un char * ca
> parametru atunci se face cast-ul automat, daca primeste un char[] ca
> parametru se copiaza pe stiva (cred).
>   Daca functia in schimb returneaza un char[] atunci la retur se va face
> copierea intregului string (1023 de caractere).
>   At least, that's the way I see it.
>   Dorin.

Chiar daca s-a face copierea pe stiva nu cred ca ar fi foarte util. Stiva e si 
ea volatila, datele trebuie folosite imediat, altfel dispar.
De exemplu nu poti sa faci:

char[] func()
{
...
}

const char *x = func();

Stiva dispare si x-ul va pointa aiurea. Trebuie sa faci obligatoriu un memcpy 
sau ceva de genul asta.

-- 
Serghei.

--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui