problem v C - retezec vs ukazatel
Pavel Chromy
mac
Středa Březen 17 12:04:54 CET 2004
On Sat, 24 Feb 2001, Jakub Ladman wrote:
> Ja jsem ten, kdo se puvodne ptal.
> Uz mi to funguje, nehlede na cistotu programatorskeho stylu.
>
> Pokud nekdo mate minutku muzete se na to mrknout a "oznamkovat" mi to.
> Prilezitostne bych uvital radu, ktera by mi naznacila, jakym zpusobem
> dosahnout stejneho vysledku aniz by retezce v polich mely konst delku.
> Precejen je to program do jednocipu a tak je uspora pameti na miste.
char *menu[3]={"1. Info","2. Teplota","3. Cas/Datum"};
Takhle retezce nebudou mit konstantni delku,
ve skutecnosti se jedna o pole ukazatelu na char, cili samotne pole
obsahuje pouze 3 pointery, a nekde jinde v pameti jsou alokovany 3
retezce.
Varovani:
pokud to nadeklarujete takto
char *menu[3];
Pouzije se normalne jako printf("%s\n",menu[0]);
pak pred pouzitim
strcpy(menu[0],"abc");
musi byt pouzito malloc(menu[0],delka) !
Nebo lze pouzit
menu[0]="abc"
cili priradit promenne typu pointer adresu retezce staticky alokovaneho
kompilatorem - da to vlastne stejny vysledek jako inicializovana promenna
uvedena uplne nahore.
Pavel Chromy
Další informace o konferenci Hw-list