Lista

  • 8 Odpowiedzi
  • 1726 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

Lista
« dnia: 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










Lista
« Odpowiedź #1 dnia: 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);

Lista
« Odpowiedź #2 dnia: 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

Lista
« Odpowiedź #3 dnia: Lipiec 26, 2001, 02:18:00 »
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami




for (i=0; i

Lista
« Odpowiedź #4 dnia: 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!





Lista
« Odpowiedź #5 dnia: 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)

Lista
« Odpowiedź #6 dnia: 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




Lista
« Odpowiedź #7 dnia: 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?

Lista
« Odpowiedź #8 dnia: Kwiecień 24, 2002, 22:16:51 »
o Jezzuuuuu....

 

  • SMF © 2024, Simple Machines | Theme by SMFTricks
  • Copyright © 2003-2024 SMARTedge.IT., Wszystkie Prawa Zastrzeżone