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/