Autor Wątek: Lista  (Przeczytany 1378 razy)

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

Offline nozynski

  • Newbie
  • Wiadomości: 4
Lista
« : 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











PDAclub.pl

Lista
« : Lipiec 25, 2001, 15:55:00 »
R E K L A M A:


Offline isthar

  • Newbie
  • Wiadomości: 6
Lista
« Odpowiedź #1 : 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);


Offline hubson

  • Clubowicz
  • *
  • Wiadomości: 70
    • http://homepage.hubert.trzewik.pl
Lista
« Odpowiedź #2 : 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


Offline hubson

  • Clubowicz
  • *
  • Wiadomości: 70
    • http://homepage.hubert.trzewik.pl
Lista
« Odpowiedź #3 : Lipiec 26, 2001, 02:18:00 »
//teraz wypelnienie tablicy wskaznikow (blptr) wartosciami




for (i=0; i


Offline hubson

  • Clubowicz
  • *
  • Wiadomości: 70
    • http://homepage.hubert.trzewik.pl
Lista
« Odpowiedź #4 : 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!






Offline hubson

  • Clubowicz
  • *
  • Wiadomości: 70
    • http://homepage.hubert.trzewik.pl
Lista
« Odpowiedź #5 : 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)


Offline code

  • Newbie
  • Wiadomości: 7
    • http://home.elka.pw.edu.pl/~mmochol
Lista
« Odpowiedź #6 : 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





Offline radomir

  • Newbie
  • Wiadomości: 3
Lista
« Odpowiedź #7 : 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?


Offline dr.pajhiwo

  • Clubowicz
  • **
  • Wiadomości: 209
Lista
« Odpowiedź #8 : Kwiecień 24, 2002, 22:16:51 »
o Jezzuuuuu....