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