code napisał:
hubson napisał:
To jest 10 elementowa tablica wskazników. W kodzie brakuje jeszcze alokacji pamięci na poszczególne stringi. Przedstawione w przykladzie isthara podstawienie odbywa sie w nieprzydzielonej pamieci.code napisał:
hubson napisał:
To jest 10 elementowa tablica wskazników. W kodzie brakuje jeszcze alokacji pamięci na poszczególne stringi. Przedstawione w przykladzie isthara podstawienie odbywa sie w nieprzydzielonej pamieci.
A nie przypadkiem pamieci na stosie ?
Leniwy sposob przerobienia tego wyglada tak:
char items[ilePozycji][dlugoscNapisu]
char* blptr[ilePozycji];
int i;
ListType* l;
l = FrMGetObjectPtr(frm, FrmGetObjectIndex(frm, BuddyList));
items[0] = "entry 1 "; //zawsze mam watpliwosci, czy tak mozna podstawic calego stringa
items[1] = "entry 2 ";
/* ... */
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami
Mam pytanie: Czy w takim razie na palmie instrukcja:
items[0] = "entry 1 ";
kopiuje stringa? W ANSI C do kopiowania stringów jest funkcja strcpy, a
instrukcja j.w. kopuje tylko wskaznik. Wydaje mi sie, ze kod napisany powyzej nie skompilowalby sie -- tablica dwuwymiarowa items umieszczana jest na stosie
jako jeden ciag bajtow, a nie jako tablica wskaznikow na tablice charow -- nie mozna
wiec zmienic items[0].
Wydaje mi sie, ze jedyny poprawny kod byl ten z tablica wskaznikow:
char *items[10];
items[0] = "abc"; // Kopiujemy wskaznik, nie tekst!
Napis "abc" byłby zainicjowany w bloku pamieci przydzielonym dla stalych, a items[0] po prostu wskazywal by w to miejsce.
Ale tak to dziala na kazdym innym C. Czy na Palmie jest inaczej? Jesli instrukcja przypisania
kopiuje napis, to jak w takim razie przekopiowac sam wskaznik?