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

Tytuł: Lista
Wiadomość wysłana 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









Tytuł: Lista
Wiadomość wysłana przez: isthar w Lipiec 25, 2001, 22:44:00
char* blptr[10];




   ListType* l;









    l = FrMGetObjectPtr(frm, FrmGetObjectIndex(frm, BuddyList));









    blptr[0] = "entry 1";




    blptr[1] = "entry 2";




    /* ... */









    LstSetListChices(l, blptr, 10);
Tytuł: Lista
Wiadomość wysłana przez: hubson w Lipiec 26, 2001, 02:16:00
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
Tytuł: Lista
Wiadomość wysłana przez: hubson w Lipiec 26, 2001, 02:18:00
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami




for (i=0; i
Tytuł: Lista
Wiadomość wysłana przez: hubson w Lipiec 26, 2001, 02:19:00





//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!




Tytuł: Lista
Wiadomość wysłana przez: hubson w Lipiec 26, 2001, 02:20:00
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)
Tytuł: Lista
Wiadomość wysłana przez: code w Październik 24, 2001, 02:08:51
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



Tytuł: Lista
Wiadomość wysłana przez: radomir w Kwiecień 24, 2002, 09:53:42
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?
Tytuł: Lista
Wiadomość wysłana przez: dr.pajhiwo w Kwiecień 24, 2002, 22:16:51
o Jezzuuuuu....