Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?
Miroslav Mraz
mrazik na volny.cz
Středa Duben 17 15:12:24 CEST 2024
Musí nemusí. On ten String kromě ukazatele na data obsahuje ještě další
věci - kapacitu a stávající délku. Takže do registru se to nevejde, jak
se to předává v AVR nevím a ani mě to moc nezajímá.
Co se týká C asi jde udělat něco takového
#include <stdio.h>
typedef struct {
char array [64];
} foo;
foo fce () {
foo result;
snprintf(result.array, 64, "(%p) To je test\n", result.array);
return result;
}
int main () {
foo f = fce ();
printf("[%p] %s", f.array, f.array);
return 0;
}
a je vidět, že se tam ta struktura "nějak" zkopírovala jinam. Nevím jak
funguje v C to automatické přiřazení. V C++ by to byl kopírovací
konstruktor, který se umí vytvořit (pro jednodušší objekty) automaticky
prostým memcpy(). Ale fakt nemyslím, že by to někdo nějak masivně
používal. A alokovat pole proměnné délky na zásobníku jde až v novějších
dialektech C, dřív se muselo používat tuším alloca(). Ale možná mluvíme
každý o něčem jiném.
Mrazík
On 17. 04. 24 14:03, Jan Waclawek wrote:
> Okej, tak to potom vysvetluje aj tie posledne detaily, resp. ten zasobnik
> sa tym padom nemusi preusporiadavat.
>
> Od cisteho C sa to potom viacmenej lisi len tym, ze sa ta
> alokacia/dealokacia a kopirovanie deje automaticky vdaka
> konstruktoru/destruktoru tej anonymnej premennej (objektu) (internet ma
> poucil, ze v C++ svete sa ta premenna nevola anonymous ale temporary).
>
> wek
>
Další informace o konferenci Hw-list