PDAclub.pl - Forum użytkowników technologii mobilnych
Pozostałe platformy => Oprogramowanie Palm OS => Palm OS => Perły z lamusa => Palm OS (dev) => Wątek zaczęty przez: nozynski w Lipiec 25, 2001, 15:55:00
-
Mam palma V
Mam pytanie jaka funkcja dodaje nowy element do obiekrtu typu Lista.
Robię w kodzie
ListPtr lst;
LstEraseList(lst);
i nie wiem jak dodać nowe wartosci do listy
-
char* blptr[10];
ListType* l;
l = FrMGetObjectPtr(frm, FrmGetObjectIndex(frm, BuddyList));
blptr[0] = "entry 1";
blptr[1] = "entry 2";
/* ... */
LstSetListChices(l, blptr, 10);
-
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.
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\\0\"; //zawsze mam watpliwosci, czy tak mozna podstawic calego stringa
items[1] = \"entry 2\\0\";
/* ... */
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami
for (i=0; i
-
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami
for (i=0; i
-
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami
for (i=0; i(mniejsze rowne)ilePozycji; i++) {
blptr = &items[0];
};
LstSetListChices(l, blptr, 10);
I mniej wiecej w tej formie juz powinno dzialac. Tablice wskaznikow potrafia zwodzic i latwo sie wkopac, tak jak zrobil to isthar.
char* blptr[10]; alokuje tylko 10 * sizeof(CharPtr) i nie ma tu miejsca na zawarcie stringow;
..znowuz..
char items[10][10]; alokuje 100 bajtow (10*10), ale tylko na stringi i nie ma tu miejsca na wartosci wskaznikow
..a..
do budowy listow jest potrzebna tablica ze _wskaznikami_ na _stringi_ w pamieci
Powodzenia!
-
Sorki za wielokrotny post - znak mniejszosci byl interpretowany jako kawalek taga.. (i oczywiscie chodzi o mniejszy, a nie mniejszy-rowny, choc to akurat sprawa drugorzedna)
-
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\0"; //zawsze mam watpliwosci, czy tak mozna podstawic calego stringa
items[1] = "entry 2\0";
/* ... */
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami
for (i=0; i
-
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?
-
o Jezzuuuuu....