19:39 < adam__i> ----------------------------------------------------------------czesc 5 ------------------------------------------- 19:39 <@Gynvael> hehe to pewnie sygnal dla mnie ze mam zaczynac ;> 19:39 <@Gynvael> witam wiec wszystkich ;>o 19:39 < adam__i> To zaznaczenie sie mijsca w logu 19:39 * Gynvael patrzy na zegarek 19:39 <@Gynvael> rowno 21 ;> 19:39 < d0b0c0p> my ciebie tez ;) 19:40 < adam__i> Nom my iebie tez 19:40 <@Gynvael> ;> 19:40 <@Gynvael> tyo nice ;> 19:40 <@Gynvael> ok 19:40 <@Gynvael> niech sie kazdy obecny duchem odezwie ;> 19:40 <@Gynvael> co bym wiedzial czy mowie do botow ;> 19:40 <@Gynvael> czy do ludzi ;> 19:40 < d0b0c0p> jezdem ja :] 19:40 <@salv4tion> o 19:40 < nietopesz> peace 19:40 <@bubel> ekhm mowisz do pol czlowieka 19:40 <@bubel> i pol sesji 19:40 <@salv4tion> kurs juz byl? 19:40 <@salv4tion> tzn wyklad? 19:40 <@bubel> salv4tion: dawno 19:40 <@bubel> :p 19:40 <@salv4tion> lol 19:40 <@salv4tion> o 9 mial byc 19:40 <@Gynvael> witamy salva ktory jak zwykle jest w temacie ;> 19:40 < d0b0c0p> ale juz byl 19:40 <@bubel> no rano ;> 19:41 <@Gynvael> ok 19:41 <@bubel> heh 19:41 <@Gynvael> ktos jeszcze jest online ? 19:41 <@salv4tion> Gynvael: ?! 19:41 * Gynvael naliczyl 4 osoby eheheh 19:41 < d0b0c0p> Gynvael ^^ 19:41 <@Gynvael> salv4tion: wlasnie sie zaczyna ;> 19:41 <@salv4tion> acha [; 19:41 <@bubel> Gynvael: 3.5 ;p 19:41 <@salv4tion> to spoko [; 19:41 <@j00ru> hmm 19:41 <@j00ru> powiedzmy ze ja jestem 19:41 <@j00ru> ale tyo tak na sec wpadlem 19:41 <@bubel> j00ru: idz cracz 19:41 -!- gripeq [grip@praganet.pl] has joined #gynkurs 19:41 <@j00ru> tylko looknac 19:41 <@salv4tion> bo mnie od popoludnia nie bylo w domy [; 19:41 <@j00ru> jak se radzisz 19:41 <@j00ru> ;] 19:41 <@Gynvael> ;> 19:41 < gripeq> bry. 19:41 <@Gynvael> heheh 19:41 <@Gynvael> bry 19:41 <@Gynvael> ok 19:41 <@bubel> bry 19:41 <@Gynvael> to zaczynamy 19:41 < d0b0c0p> nry 19:41 <@bubel> spac 19:41 <@j00ru> bubel: eh ;/ 19:41 < d0b0c0p> * bry 19:41 <@Gynvael> 22 osoby na kanale ;> 17 botow ;> 19:41 <@salv4tion> lol 19:42 <@Crousader> :D 19:42 <@Gynvael> wiec mozna nawijac ;> 19:42 -!- m4shed [n3tdes@bsd.miki.eu.org] has joined #gynkurs 19:42 <@Crousader> dawaj 19:42 -!- phoenix__ [~phoenix@cdo24.neoplus.adsl.tpnet.pl] has joined #gynkurs 19:42 <@bubel> w8 19:42 < d0b0c0p> juz jest lepiej :) 19:42 <@bubel> ludzie wchodza 19:42 < m4shed> hi all :] 19:42 <@Crousader> ja chce o stringach 19:42 <@salv4tion> nie 'dawaj' 19:42 <@bubel> hi 19:42 <@Gynvael> hm ;> 19:42 < d0b0c0p> hi 19:42 <@salv4tion> tylko prosze [; 19:42 < phoenix__> juz jest ? 19:42 <@Gynvael> ok 19:42 < phoenix__> hi' 19:42 <@Crousader> proshe 19:42 <@Gynvael> poczekamy jeszcze minute ;> 19:42 <@Crousader> prosze 19:42 <@Crousader> bir 19:42 <@Gynvael> i zaczynamy 19:42 < d0b0c0p> Gynvael: moze jeszcze ok. 3 min.? :) 19:42 <@Gynvael> d0b0c0p: czemu 3? ;> 19:42 <@salv4tion> hmm 19:42 <@salv4tion> cos zegarek mi pozni ;/ 19:42 <@salv4tion> ;p 19:42 <@Crousader> a moze 3.43525 minuty? 19:42 < d0b0c0p> bo moze spolznialsy dojda 19:42 < phoenix__> ee kto jeszcze przyjdzie ? 19:42 < d0b0c0p> ;d 19:42 < d0b0c0p> tak przy okazji to moze ktos +o ;) 19:43 -!- mode/#gynkurs [+ooo d0b0c0p adam__i m4shed] by Gynvael 19:43 -!- mode/#gynkurs [+o adam__i] by Crousader 19:43 -!- mode/#gynkurs [+ooo nietopesz phoenix__ gripeq] by Gynvael 19:43 <@bubel> no dobra 19:43 -!- mode/#gynkurs [+o nietopesz] by Crousader 19:43 <@bubel> jeszcze 1min 19:43 <@bubel> i spadam 19:43 <@Gynvael> ;> 19:43 <@d0b0c0p> hieh ;) 19:43 <@Gynvael> dobra 19:43 <@Gynvael> to ja wrzucam +m;> 19:43 <@bubel> Gynvael: daj mi ta jedna modelke 19:43 <@Crousader> to po co tu przylazles:D 19:43 <@Gynvael> i mowie co tam dzisaij bedzie ;> 19:43 <@d0b0c0p> ok 19:43 -!- mode/#gynkurs [+m] by Gynvael 19:43 <@Blizzard> Gynvael: ok go! 19:43 <@Gynvael> OK ;> 19:43 <@Gynvael> Wiec ;> 19:43 <@Blizzard> ;x 19:43 <@Crousader> czekaj 19:43 <@Crousader> babcia dzwoni 19:43 <@Crousader> :D 19:43 <@Gynvael> Witam wszystkich 1m... 19:43 <@m4shed> heh 19:43 <@Gynvael> Crousader: page up nacisniesz ;p 19:43 <@Gynvael> ;> 19:44 <@d0b0c0p> ciiiiii 19:44 <@Blizzard> ciiichosza 19:44 <@Gynvael> Dzisiaj bedzie zgodnie z obietnica o stringach ;> 19:44 <@Gynvael> Czyli STRINGS OF CHARS :> 19:44 * Blizzard mm. 19:44 <@SlimFast> STRINGI mojej siorki ? 19:44 <@SlimFast> ;] 19:44 <@Gynvael> lancuchy znakow potocznie zwane napisami badz po prostu stringami 19:44 * Crousader prosi o cisze 19:44 <@d0b0c0p> SlimFast: ciiiii 19:44 <@d0b0c0p> cicho no! spokoj!!! 19:44 <@Gynvael> dementuje pogloski jakoby chodzilo o damskie, tudziez meskie stringi ;> 19:44 <@bubel> to idem stad 19:44 <@Gynvael> ok 19:44 <@m4shed> ;] 19:44 <@Gynvael> pa bubel 19:44 -!- phoe [^phoenix@cdd13.neoplus.adsl.tpnet.pl] has joined #gynkurs 19:44 * Crousader udaje rozczarowanego 19:44 <@bubel> pa 19:44 <@d0b0c0p> cya bubel 19:44 -!- mode/#gynkurs [+o phoe] by phoenix__ 19:44 <@Blizzard> ehhh 19:45 <@Gynvael> ale zeby do stringow dojsc, najpierw zachaczymy o tablice 19:45 <@d0b0c0p> ciiii 19:45 <@m4shed> juz nie mogl wyrobic tak mysli o tych stringach :p 19:45 <@d0b0c0p> ciiiiiiiiiiii 19:45 <@Gynvael> potem krotko o pointerach 19:45 <@d0b0c0p> ej no spokoj, obore robicie 19:45 -!- mode/#gynkurs [-o m4shed] by Blizzard 19:45 -!- j00ru is now known as j00ru`tv 19:45 -!- mode/#gynkurs [+o m4shed] by d0b0c0p 19:45 <@m4shed> dobra juz sorry 19:45 * Crousader ... 19:45 <@Gynvael> a potem operacje na stringach, recznie (pointerki) jak i za pomoca funkcji z string.h 19:45 <@phoenix__> !time 19:45 -phoe:#gynkurs- 21:06:18 19:45 * Crousader :[ 19:45 <@phoenix__> aha 19:45 <@Gynvael> ok 19:45 <@phoenix__> no dobra zaczynaj 19:45 <@phoenix__> ;] 19:46 <@d0b0c0p> pany na powaznie, siadnac na pupie i sluchac profesorka ;> 19:46 <@SlimFast> ------------------------------LEKCJA 5-------------------------------------------------------------------------- 19:46 <@Gynvael> Krotkie przypomnienie co to jest pointer na poczatek 19:46 <@SlimFast> ------------------------------LEKCJA 5------------------------------------------------------- 19:46 <@Gynvael> pointer to ADRES zmiennej 19:46 <@Gynvael> adres zmiennej w pamieci 19:46 <@Gynvael> adres, jako LICZBA ;. 19:46 <@Crousader> pytanie z sali : pointer to * ? 19:46 <@Gynvael> numer pierwszego bajtu zmiennej, liczac od 0 19:46 <@phoenix__> (wskaznik inaczej) sry za wtracenie 19:46 <@phoenix__> Crousader: tak 19:46 <@Gynvael> 0 to poczatek pamieci ;> 19:47 -!- Vitro [Logan_@dial-993.zgora.dialog.net.pl] has joined #gynkurs 19:47 -!- mode/#gynkurs [+o Vitro] by phoe 19:47 <@Gynvael> zmienne typu pointer w C przy deklaracji oznaczamy * 19:47 <@Gynvael> na przyklad 19:47 <@Gynvael> int *a; 19:47 <@Gynvael> "a" jest pointerem do zmiennej typu int 19:47 <@Gynvael> "a" jest ADRESEM zminnej typu int 19:47 -!- phoenix__ is now known as phoenix__`pytan 19:47 <@Gynvael> jakiej zmiennej ? a jakiej chcemy 19:47 <@Crousader> a samo 'a' byc nie moze? 19:47 <@Gynvael> samo a 19:47 <@Gynvael> czyli 19:47 <@Gynvael> int a; 19:47 <@Gynvael> "a" jest zmienna typu int 19:47 -!- phoenix__`pytan is now known as phoenix_pytanie 19:47 <@Gynvael> "a" nie adresem 19:47 <@Crousader> ok 19:47 <@Gynvael> phoenix_pytanie: co tam ? 19:47 -!- Vitro [Logan_@dial-993.zgora.dialog.net.pl] has quit ["Eee... to umiem. Greetz for Gyn i w ogole czesc :)."] 19:48 <@Gynvael> ;> 19:48 * d0b0c0p chce sei skupic, ale nie moze, bo ciagle nawijacie 19:48 <@phoenix_pytanie> hhm a w C++ jest tak zamo ? 19:48 * Crousader umie c++ ale w c to pierwszy raz siedzi :D 19:48 <@Crousader> tak samo 19:48 <@d0b0c0p> krotkie przyp.: PYTANIA NA KONCU!!! 19:48 <@Gynvael> phoenix_pytanie: tak, w C++ jest to samo 19:48 <@Gynvael> ok 19:48 <@Gynvael> przypomnienie zasad ;> 19:48 <@phoenix_pytanie> bo mi sie cos przypomina a = &b 19:48 <@m4shed> je kurde 19:48 <@Gynvael> powinienem w sumie na poczatku o tym mowic ;> 19:48 <@m4shed> cisza 19:48 <@Gynvael> ale zawsze zapomne 19:48 <@Gynvael> wiec tak 19:48 <@phoenix_pytanie> to z adresem ?:> to jak z tym jest ? 19:48 <@m4shed> ja tez sie nie moge skupic 19:48 <@Gynvael> jak jest +m, mimo ze mozecie mowic, to nie mowicie ;> 19:48 <@d0b0c0p> ciiiii 19:48 -!- cinq [^cinq@cdd13.neoplus.adsl.tpnet.pl] has joined #gynkurs 19:49 -!- mode/#gynkurs [+o cinq] by phoe 19:49 <@Gynvael> ja sobie nawijam spokojnie, a potem jak zdejme -m, jest czas na pytania ;> 19:49 <@Gynvael> tak bedzie lepiej sie potem loga czytac 19:49 -!- phoenix_pytanie is now known as phoenix__ 19:49 * Crousader proponuje wszystkim deopa, odzywa sie tylko gyn, pytania na koncu, albo za pomca zmiany nicka 19:49 <@Gynvael> a ja na wszystkie pytania odpowiem, nie bojcie sie ;> 19:49 <@d0b0c0p> Gynvael: po to w koncu jestes ;> 19:49 <@gripeq> Gynvael: jakie bedzie dzisiejsze losowanie totka ? 19:49 <@Gynvael> opami wy sie rzadzcie ;> 19:49 <@kiero> [; 19:50 <@d0b0c0p> ejejej jaka dzisiaj obora 19:50 <@Gynvael> gripeq: 3 7 12 23 40 41 19:50 <@Gynvael> ok 19:50 <@Gynvael> jedziemy dalej ;> 19:50 <@cinq> go go go 19:50 <@Gynvael> krotkie przypomnienie uzywania wskaznikow 19:50 <@Gynvael> int *a, b; 19:50 <@Gynvael> "a" jest wskaznikiem na zmienna typu int 19:50 <@Gynvael> podczas gdy "b" jest zmienna typu int 19:50 <@Gynvael> aby uzyskac ADRES zmiennej "b", przed jej nazwe dajemy znak & 19:50 <@Gynvael> na przyklad 19:50 <@m4shed> a = &b?? 19:51 <@Gynvael> nadanie zmiennej "a" wartosci rownej adresowi zmiennej b, to 19:51 <@Gynvael> a = &b; 19:51 <@m4shed> a sorry 19:51 <@d0b0c0p> m4shed: nosz qrde cicho!! 19:51 -!- phoenix__ is now known as o_to_mi_chodzil 19:51 -!- o_to_mi_chodzil is now known as phoenix__ 19:51 <@Gynvael> b = 12; < =- to ofc nadanie zmiennej "b" wartosci 12 19:51 <@Gynvael> mozemy za pomoca wskaznika ta wartosc zmienic 19:51 <@Gynvael> wystarczy ze zapiszemy do "a" adres "b" 19:51 <@Gynvael> po czym odwolamy sie do tego na co wskazuje "a" 19:51 <@Gynvael> czyli 19:52 <@Gynvael> a = &b; 19:52 <@Gynvael> *a = 13; 19:52 <@Gynvael> od teraz to na co wskazuje "a", czyli "b", ma wartosc 13 19:52 <@Gynvael> ok, tyle przypomnienia wskaznikow, bedzie ich jeszcze dzisiaj duzo 19:52 <@Gynvael> podstawy wskaznikow byly na #4 wiec odsylam do logow w razie czego 19:52 <@Gynvael> teraz punkt drugi programu, czyli TABLICE 19:53 <@Gynvael> czasami (bardzo czesto ;p) sie zdarza ze potrzebujemy nie tyle jednej zmiennej 19:53 -!- cinq [^cinq@cdd13.neoplus.adsl.tpnet.pl] has left #gynkurs [] 19:53 <@Gynvael> co paru zmiennych 19:53 <@Gynvael> moze podam zastosowanie i jak to wyglada 19:53 <@Gynvael> przykladowo 19:53 <@Gynvael> int a[10]; 19:53 <@Gynvael> to jest TABLICA 10 intow 19:54 <@Crousader> czyli a moze miec 19:54 <@Gynvael> co to znaczy tak naprawde, czym jest tablica ? 19:54 <@Crousader> a[1,2,3 itp] ?? 19:54 <@Gynvael> Crousader: nie nie moze 19:54 <@Crousader> :( 19:54 <@salv4tion> cicho qrwa 19:54 <@Gynvael> kompilator utworzy w pamieci miejsce na 10 zmiennych typu int 19:54 <@Gynvael> beda to po kolei 19:55 <@Gynvael> a[0], a[1], a[2], ..., a[9] 19:55 <@Gynvael> i tak samo bedziemy sie do nich odwolywac 19:55 <@Gynvael> a[0] = 12; 19:55 <@Gynvael> a[1] = a[0] + 2; 19:55 <@Gynvael> etc 19:55 <@Gynvael> traktujemy je jak normalne zmienne 19:55 <@Gynvael> teraz troche faktow i terminologii 19:55 <@Gynvael> int a[10]; 19:55 <@Gynvael> co jest co 19:55 <@Gynvael> "a" to oczywiscie NAZWA, ale tym razem TABLICY 19:56 <@Gynvael> [10] to ILOSC ELEMENTOW TABLICY; 19:56 <@Gynvael> int to oczywiscie typ 19:56 <@Gynvael> a[0] = 12; 19:56 <@Gynvael> a to nazwa tablicy, [0] to INDEX (numer porzadkowy, jak kto woli) 19:56 <@Gynvael> int a[10]; 19:56 <@Gynvael> teraz troche faktow przydanych 19:57 <@Gynvael> "a" jest STALYM WSKAZNIKIEM na PIERWSZY ELEMENT TABLICY 19:57 <@Gynvael> od kompilatora mamy zapewnienie ze KOLEJNE ELEMENTY TABLICY MAJA KOLEJNE ADRESY 19:57 <@Gynvael> przykladowo 19:57 <@Gynvael> jesli a[0] ma adres 1000 19:57 <@Gynvael> to a[1] ma adres 1000 + sizeof(a[0]) 19:57 <@Gynvael> czyli 19:57 <@Gynvael> sizeof(a[0]) to sizeof(int), czyli 4 19:57 <@Gynvael> czyli a[1] ma adres 1004 19:57 <@Gynvael> a[2] ma adres 1008 19:58 <@Gynvael> a[3] ma adres 1012 19:58 <@Gynvael> etc 19:58 <@Gynvael> wiec 19:58 <@Gynvael> jako ze "a" jest wskaznikiem 19:58 <@Gynvael> mozemy napisac 19:58 <@d0b0c0p> Gynvael: mozesz rowniez powiedziec jak sa w pamieci rozmieszczone tablice wielowymiarowe (ale nie wiem cyz teraz) 19:58 <@Gynvael> *a = 1; 19:58 <@Gynvael> d0b0c0p: powiem powiem, ale pozniej 19:59 <@Gynvael> czyli, to na co wskazuje "a" ma byc rowne 1 19:59 <@Gynvael> "a" jak mowilem jest STALYM WSKAZNIKIEM na pierwszy element tablicy 19:59 <@Gynvael> pierwszym elementem jest a[0] 19:59 <@Gynvael> czyli 19:59 <@Gynvael> *a = 1; 19:59 <@Gynvael> to to samo co 19:59 <@Gynvael> a[0] = 1; 19:59 <@Gynvael> ok 19:59 <@Gynvael> a teraz 19:59 <@Gynvael> po jaka cholere sa tablice ? 19:59 -!- lemix [~lemixx@proxy.iginet.net] has joined #gynkurs 19:59 -!- mode/#gynkurs [+o lemix] by phoe 19:59 <@Gynvael> coz, zastosowan jest baardzo duzo 20:00 <@Gynvael> przykladowym zastosowaniem moze byc takie cos: 20:00 <@Gynvael> - mamy 10 liczb (roznych) 20:00 <@Gynvael> - chcemy je wypisac na ekran 20:00 <@Gynvael> mozemy to zrobic: 20:00 <@Gynvael> printf("%i\n", pierwsza_liczba); 20:00 <@Gynvael> printf("%i\n", druga_liczba); 20:00 <@Gynvael> printf("%i\n", trzecia_liczba); 20:00 <@Gynvael> etc 20:00 <@Gynvael> ale jest to duzo pisania 20:01 <@Gynvael> duzo lepszym sposobem jest stworzenie tablicy 10 elementow 20:01 <@Gynvael> int liczby[10]; 20:01 <@Gynvael> i po kolei nadanie wartosci poszczegolnym elementom 20:01 <@Gynvael> takim jakie chcemy 20:01 <@Gynvael> mozna to zrobic "recznie", czyli 20:01 <@Gynvael> liczba[0] = 1; 20:01 <@Gynvael> liczba[1] = 123; 20:01 <@Gynvael> liczba[2] = 45; 20:01 <@Gynvael> etc 20:01 <@Gynvael> natomiast w jezyku C mozna "inicjalizowac" tablice 20:01 <@Gynvael> to znaczy mozna napisac tak: 20:02 <@Gynvael> int liczby[10] = { tutaj, kolejne, wartosci, elementow, oddzielone, przecinkami }; 20:02 <@Gynvael> tzn 20:02 -!- dentor1n [^l33t@anp31.neoplus.adsl.tpnet.pl] has joined #gynkurs 20:02 -!- mode/#gynkurs [+o dentor1n] by phoe 20:02 <@Gynvael> int liczby[10] = { 1, 123, 45, 56, 73, 12, 4, 23, 33, 12 }; 20:02 <@Gynvael> i teraz 20:02 <@Gynvael> robimy zmienna zwana iteratorem 20:03 <@Gynvael> (powszechna praktyka jest nazywanie jej "i") 20:03 <@Gynvael> to jest po prostu zmienna ktora po kolei przyjmuje kolejne wartosci ;> 20:03 <@Gynvael> zwykly int ;> 20:03 <@Gynvael> int i; 20:03 <@Gynvael> i stosujemy znana nam juz petle for 20:03 <@Gynvael> for( i = 0; i < 10; i++ ) printf("%i\n", liczby[i]); 20:04 <@Gynvael> czyli, dla kolejnych wartosci "i", od 0 do 9 beda wypisywane liczby z tablicy "liczby" 20:04 -!- d13t3r^C0D3 [~x@g105.softel.elblag.pl] has joined #gynkurs 20:04 -!- mode/#gynkurs [+o d13t3r^C0D3] by phoe 20:04 <@Gynvael> tablice moga byc dowolnego rodzaju 20:04 <@Gynvael> czy to int, float, czy char 20:04 -!- salv4tion is now known as mam_pytanie 20:05 <@Gynvael> tablicami jednowymiarowymi typu "char" za chwile sie bedziemy bawic, jako ze sa one uzywane do nieslawnych "stringow" ;> 20:05 <@Gynvael> int a[10]; 20:05 <@Gynvael> jako ze "a" jest STALYM wskaznikiem, nie mozemy zrobic 20:05 <@Gynvael> int b; 20:05 <@Gynvael> a = &b; 20:05 -!- Crousader is now known as popracie_dla_py 20:05 <@Gynvael> poniewaz byl by to blad 20:05 <@Gynvael> (jeszcze chwile ;>) 20:05 <@Gynvael> mozemy natomiast zrobic tak: 20:05 -!- popracie_dla_py is now known as Crousader 20:05 <@Gynvael> int a[10], *b; 20:06 <@Gynvael> b = a; 20:06 -!- mam_pytanie is now known as salv4tion 20:06 -!- phoenix__ is now known as zapiszcie_na_ka 20:06 <@Gynvael> jest to calkowicie poprawnie 20:06 -!- zapiszcie_na_ka is now known as kartce 20:06 <@Gynvael> rownie poprawny bedzie zapis: 20:06 -!- kartce is now known as phoenix__ 20:06 <@Gynvael> b[2] = 12; 20:06 <@Gynvael> MIMO ZE "b" NIE JEST TABLICA 20:06 -!- SlimFast [~123@gate.olnet.com.pl] has quit ["Leaving"] 20:06 <@Gynvael> jaka jest wiec roznica miedzy WSKAZNIKIEM a TABLICA ? skoro w obu przypadkach mozna robic b[3] ? 20:07 <@Gynvael> dwie rzeczy: 20:07 <@d13t3r^C0D3> tablice mozna przepelnic 20:07 <@gripeq> margaryna czy maslo ? (przepraszam :> ) 20:07 <@salv4tion> nie mozna 20:07 <@Gynvael> - wskaznikowi mozna zmienic adres wskazywany, a tablicy nie 20:07 <@d13t3r^C0D3> aha 20:07 <@d0b0c0p> ciiii 20:07 <@d0b0c0p> obore znowu robicie 20:07 <@d13t3r^C0D3> aha oki sorki 20:07 <@Gynvael> - kompilator ALOKUJE tablicy okreslona ilosc miejsca w pamieci, a wskaznikowi oczywiscie nie ;> bo on ma wskazywac na cos co istnieje ;> 20:08 -!- salv4tion is now known as daj_gyn_cos_pow 20:08 <@Gynvael> czyli TABLICA to WSKAZNIK NA MIEJSCE W PAMIECI O OKRESLONEJ WIELKOSCI ;> 20:08 <@Gynvael> (staly wskaznik) 20:08 <@Gynvael> 2 slowa jeszcze o czestych bledach 20:08 <@Gynvael> mianowicie 20:08 <@Gynvael> int a[10]; oznacza 10 elementow, ale sa to elementy o indexach od 0 do 9 20:08 <@Gynvael> element a[10] jest PO ZA TABLICA, i proba odczytu badz zapisu do niego MOZE SIE SKONCZYC PAROMA GODZINAMI SZUKANIA BLEDU 20:09 <@Gynvael> przykladowo: 20:09 <@Gynvael> int a, b[10]; 20:09 <@Gynvael> a = 12; 20:09 <@Gynvael> b[10] = 13; 20:09 <@Gynvael> w tym wypadku na wiekszosci kompilatorow zostala by zamieniona NIEJAWNIE wartosc zmiennej "a" 20:09 <@Gynvael> a programista moze tego nei wiedziec 20:09 <@Gynvael> wiec trzeba uwazac ;> 20:09 <@Gynvael> ok 20:09 -!- mode/#gynkurs [-m] by Gynvael 20:09 <@Gynvael> pytanka ? 20:09 <@daj_gyn_cos_pow> no 20:09 <@daj_gyn_cos_pow> taaa 20:09 <@daj_gyn_cos_pow> ja mam 20:09 <@Crousader> :] 20:09 <@daj_gyn_cos_pow> wiec tak 20:09 <@d13t3r^C0D3> no ja tez mam 20:09 <@daj_gyn_cos_pow> narazie moje 2 pytanie 20:10 <@d0b0c0p> ja tez 20:10 <@d13t3r^C0D3> ale najpierw salv 20:10 <@d0b0c0p> czy mozna zmusic kompilator, aby pokazywal czy przypisano tablicy element spoza jej zasiegu? 20:10 <@d13t3r^C0D3> pozniej ja 20:10 <@daj_gyn_cos_pow> dobrze odpowiedzialem d13t3r^C0D3 ze sie nie da przepelnic tablicy? 20:10 <@daj_gyn_cos_pow> bo jest zdefiniowany rozmiar 20:10 <@daj_gyn_cos_pow> np 20:10 <@daj_gyn_cos_pow> a[10] 20:10 <@daj_gyn_cos_pow> czyli maxymlanie 10 w tablicy rzeczy 20:10 <@daj_gyn_cos_pow> ne? 20:10 <@d13t3r^C0D3> da sie 20:10 <@Crousader> ale int ! 20:10 <@m4shed> da rade 20:10 <@Crousader> przepelnienie daje nam na 20:10 <@Gynvael> d0b0c0p: z tego co kojarze, to o ile blad typu int a[10]; a[12] = 12; zglosi, to nie ma szans wykryc bledu typu int a[10], b= 12; a[b] = 12; 20:10 <@daj_gyn_cos_pow> a to chuj, no pytam sie 20:10 <@Crousader> - 20:10 <@adam__i> A czmu nie 20:10 <@m4shed> w programie da sie zwiekszyc stos 20:11 <@daj_gyn_cos_pow> Gynvael: ? 20:11 <@daj_gyn_cos_pow> Gynvael: jak bedzie? 20:11 <@daj_gyn_cos_pow> Gynvael: bo chce zadac moje 1 pytanie 20:11 <@Gynvael> daj_gyn_cos_pow: da sie przepelnic, bez problemu, ale problem jest taki, ze przepelniajac NISZCZYMY RZECZY KTORE SA FIZYCZNIE (w pamieci) BEZPOSREDNIO ZA TABLICA 20:11 <@Gynvael> tablica ma STALY ROZMIAR 20:11 <@d13t3r^C0D3> aaaa mialem racje :] 20:11 <@daj_gyn_cos_pow> a to nie wiem 20:11 <@daj_gyn_cos_pow> dobra 20:11 <@daj_gyn_cos_pow> moj blad 20:11 <@daj_gyn_cos_pow> pytanie 1 20:11 <@d0b0c0p> ja moge wtracic sie :D 20:11 * Crousader wybacza 20:11 <@m4shed> d13t3r: ja tez cie poparlem :p 20:12 <@Crousader> ok boze 20:12 <@daj_gyn_cos_pow> czemu sie przewaznie zapisuje jakis text do tablicy a nie go zmiennej? 20:12 <@Crousader> bedziecie sie podlizywac teraz? 20:12 <@d0b0c0p> masz int a[10]; b; a[10] = 32; // przypisesz do b ;] 20:12 <@daj_gyn_cos_pow> do* 20:12 <@phoenix__> Gynvael: o tym ze sie niszcza bylo w sumfoni 20:12 <@m4shed> Crousader: ;] 20:12 <@Gynvael> daj_gyn_cos_pow: jaka znasz najwieksza zmienna ? 20:12 <@daj_gyn_cos_pow> e 20:12 <@d0b0c0p> long long ;] 20:12 <@daj_gyn_cos_pow> no chyba 20:12 <@Crousader> double long 20:12 <@daj_gyn_cos_pow> no 20:12 <@Gynvael> long double ;> 20:13 <@Crousader> :D 20:13 <@Gynvael> ma w zaleznosci od kompilatora 12 lub 16 bajtow 20:13 <@Crousader> wlasnie 20:13 <@d0b0c0p> ladnie 20:13 -!- ron4in [p-135-186@tygrysek.krosnowice.pbsi.pl] has joined #gynkurs 20:13 -!- mode/#gynkurs [+o ron4in] by phoe 20:13 <@Crousader> mowiels o sizeof 20:13 <@Gynvael> mozna by wpisac do long doubla za pomoca paru rzutowac tekst 20:13 <@Crousader> a nie zawsze int daje 4 20:13 <@Gynvael> ale bylo by to MAX 11 liter ;> 20:13 <@daj_gyn_cos_pow> acha 20:13 <@daj_gyn_cos_pow> ;f 20:13 <@nietopesz> da sie stworzyc tablice bez zdefiniowanej wielkosci?? 20:13 <@phoenix__> Gynvael: przyklad : int a; int a[3]; a[6] = 10; int c; czy zniszczy sie int c ?:> 20:13 <@Gynvael> a jak bym chcial wpisac swoje nazwisko, to nie wejdzie ;> 20:13 <@daj_gyn_cos_pow> a do tablicy ile mozna max? 20:13 <@Gynvael> nietopesz: nie, nie da sie ;> 20:13 <@Gynvael> nietopesz: natomiast mozna kombinowac ;> 20:14 <@m4shed> nietopesz: int *a[]; 20:14 <@m4shed> tak sie nie da?? 20:14 <@d13t3r^C0D3> Gynvael: a jak mam tablice wielowymiarowa??? bo tego chyba nie dales w tym kursie nie jestem pewien bo mnie nie bylo od poczatku 20:14 <@m4shed> sorry nie nietopesz 20:14 <@adam__i> Na konec pamieci wrzucac 20:14 <@m4shed> mialo byc Gynvael 20:14 <@phoenix__> m4shed: tyo jesy chyba wskaznik do tablicuy 20:14 <@phoenix__> Gynvael: przyklad : int a; int a[3]; a[6] = 10; int c; czy zniszczy sie int c ?:>???? 20:14 <@m4shed> no tak tak 20:14 <@adam__i> Gynvael: jest jaksi w c wskznik konca pamieci 20:14 <@Gynvael> phoenix__: pomijajac to ze masz 2x int "a" (tzn taka sama nazwa).. nie, nie zniszczy sie "c" ;> 20:14 <@daj_gyn_cos_pow> Gynvael: ile wejdzie co tablicy znakow? 20:14 <@Gynvael> d13t3r^C0D3: to bedzie dopiero 20:14 <@Gynvael> m4shed: nie, tak sie nie da ;> 20:15 <@d13t3r^C0D3> ok 20:15 <@m4shed> aha 20:15 <@daj_gyn_cos_pow> Gynvael: ? 20:15 <@phoenix__> Gynvael: a co sie zniszczy ?::> 20:15 <@Gynvael> adam__i: nie kojarze zeby bylo, mozna go uzyskac, ale nie sa to latwe sposoby, natomiast pamiec mozna sobie zaalokowac (np 1mb na nasze potrzeby;>) 20:15 -!- daj_gyn_cos_pow is now known as salv4tion 20:15 <@salv4tion> Gynvael: ;> 20:15 <@salv4tion> ile mozna wsadzic do tablicy znakow maxymalnie? 20:15 <@phoenix__> Gynvael: ;> ?? 20:15 <@Gynvael> phoenix__: to zalezy od funkcji;> prawdopodobnie old_ebp badz ret ;> ale to nie dyskusja na teraz ;> 20:16 <@Gynvael> salv4tion: to zalezy od wielkosci tablicy ofc ;> 20:16 <@salv4tion> czyli? 20:16 <@d13t3r^C0D3> jak masz int[256] to 256 20:16 <@phoenix__> Gynvael: i tak nie kapuje ;P 20:16 <@Gynvael> salv4tion: jesli zaalokujesz recznie pamiec, to tyle ile masz wolnego RAMu + wolnego SWAPu ;> 20:16 <@d13t3r^C0D3> wiecej to nastapi przepelnienie 20:16 <@salv4tion> Gynvael: acha 20:16 -!- sempaikari [msc@85.219.150.240] has joined #gynkurs 20:16 -!- mode/#gynkurs [+o sempaikari] by phoe 20:16 <@salv4tion> to ja nie mam pytan chyba juz [; 20:17 <@m4shed> nareszcie :p 20:17 <@m4shed> ;] 20:17 <@Gynvael> ok 20:17 <@Gynvael> jeszcze ktos jakies pytanie ? 20:17 <@d0b0c0p> ja ne 20:17 <@sempaikari> kurs C? 20:17 <@d0b0c0p> sempaikari: tak 20:17 <@Crousader> obudzil sie... 20:17 <@Gynvael> sempaikari: yep 20:17 <@m4shed> tak 20:17 <@sempaikari> [; 20:17 <@m4shed> :] hehe 20:17 <@Gynvael> ok 20:17 <@Gynvael> lecimy dalej 20:17 <@sempaikari> heh 20:18 -!- mode/#gynkurs [+m] by Gynvael 20:18 -!- pxelx [~user@dsl137.neoplus.adsl.tpnet.pl] has joined #gynkurs 20:18 -!- mode/#gynkurs [+o pxelx] by phoe 20:18 <@pxelx> hi 20:18 <@nietopesz> czy np. a=12 to *a=13?? 20:18 <@Gynvael> (jak by ktos zasady szybko wrzucil sempaikari'owi na priva plz, i pixelowi) 20:18 <@d0b0c0p> ja moge 20:18 <@Gynvael> nietopesz: a jakiego typu jest "a" ? 20:18 <@pxelx> =] 20:18 <@nietopesz> int 20:18 <@Gynvael> nietopesz: w takim razie *a=13 to blad skladni 20:18 <@Gynvael> ;> 20:18 <@salv4tion> loguje ktos? 20:18 <@d13t3r^C0D3> dobra CICHO!!!!! Gynvael dalej lecimy 20:19 <@Gynvael> nietopesz: uzywac * mozemy tylko przy pointerach 20:19 <@Gynvael> ok 20:19 <@Gynvael> wiec, podsumowujac 20:19 <@phoenix__> salv4tion: ka 20:19 <@d13t3r^C0D3> wlasnie chcailem powiedziec 20:19 <@sempaikari> dobra nie mam nic przeciwko 20:19 <@phoenix__> salv4tion: ja 20:19 <@adam__i> salv4tion: ja 20:19 <@salv4tion> ok 20:19 <@Gynvael> int a[10]; <=- utworzenie 10 elementowej tablicy, na jej pierwszy element wskazuje STALY WSKAZNIK "a" 20:19 <@Gynvael> teraz taka rzecz 20:19 <@Gynvael> sizeof(a) zwroci "40" 20:19 <@d13t3r^C0D3> czemu? 20:19 <@Gynvael> czyli sizeof(typ) * ilosc_elementow 20:19 <@Crousader> 4x10 20:20 <@Gynvael> sizeof(int) * 10 20:20 <@Gynvael> 4 * 10 20:20 <@Gynvael> 40 20:20 <@Gynvael> ;> 20:20 <@Crousader> gyn: ! int nie zawsze daje 4 !! 20:20 <@d13t3r^C0D3> aha oki 20:20 <@Gynvael> Crousader: teraz ? zawsze 20:20 <@d0b0c0p> ael obora spokoj!!!!!!! 20:20 <@Gynvael> Crousader: 10 lat temu na dosie nie dawal 20:20 <@d0b0c0p> pytania jak -m!!! 20:20 <@Gynvael> Crousader: ale dosa malo kto juz ma ;> 20:20 <@Gynvael> Crousader: no chyba ze ma sie kompilator z kosmosu ;> 20:20 <@Crousader> Gyn: ja robie na starym kompie sobei czasem w C i tam jest inna wartosc :P 20:20 <@salv4tion> ... 20:20 <@phoenix__> Crousader: kup nowego ;P 20:21 <@Gynvael> Crousader: ;> jak mowilem ;> 10 lat temu moze dawal "2", ale teraz daje "4" ;> 20:21 <@Crousader> mam nowy 20:21 <@Gynvael> ok 20:21 <@d0b0c0p> ejejej obora!!!!!!!!!!!1 20:21 <@d0b0c0p> spokoj!!!!! 20:21 <@Gynvael> jedziemy dalej ;> 20:21 <@d0b0c0p> takie rzeczy to na priv 20:21 * Crousader po tej malej dygresji chowa sie pod stol 20:21 <@d0b0c0p> ciiii 20:21 <@Gynvael> int a[10] = {1,2,3,4,5,6,7,8,9,10}; 20:21 <@Gynvael> to inicjalizacja wartosci 20:21 <@Gynvael> int a[10] = {1,2,3}; 20:21 <@Gynvael> to ustawi tylko 3 pierwsze elementy 20:21 <@Gynvael> RESZTA ELEMENTOW, w zaleznosci od tego czy tablica jest lokalna czy globalna bedzie: 20:22 <@Gynvael> - GLOBALNA: wyzerowana 20:22 <@Gynvael> - LOKALNA: miala nieznana niewiadoma, przypadkowa, smieciowa wartosc 20:22 <@Gynvael> int a[10]; 20:22 <@Gynvael> *a to to samo co a[0] 20:22 <@Gynvael> mozemy do pointerow dodawac, bylo to ostatnio 20:22 <@Gynvael> wiec 20:22 <@Gynvael> *(a+1) 20:22 <@Gynvael> mozemy napisac 20:22 <@Gynvael> to bedzie to samo co a[1] 20:22 <@Gynvael> czyli 20:22 <@Gynvael> *(a+2) to to samo co a[2] 20:22 <@Gynvael> etc 20:23 <@Gynvael> analogicznie z pointerami 20:23 <@Gynvael> teraz tak 20:23 <@Gynvael> istnieja jeszcze tablicy dwu i wiecej wymiarowe 20:23 <@Gynvael> int a[2][10]; 20:23 <@Gynvael> a ma 2 wiersze po 10 kolumn 20:23 <@Gynvael> czyli 2*10 elementow 20:23 <@Gynvael> uzywamy nastepjaco 20:23 <@Gynvael> a[0][1] = 12; 20:24 <@Gynvael> oczywiscie jest od a[0][0] do a[1][9] 20:24 -!- PixelX_ [~pix@dsl137.neoplus.adsl.tpnet.pl] has joined #gynkurs 20:24 -!- mode/#gynkurs [+o PixelX_] by phoe 20:24 <@Blizzard> lol 20:24 <@Blizzard> 31 osob 20:24 <@Blizzard> :D 20:24 <@Gynvael> przylkladowo mozna uzywac dwu-wymiarowe tablice do przechowywania w pamieci bitmap 20:24 <@Gynvael> sa rowniez tablice wiecej wymiarowe 20:24 <@Gynvael> ale szczerze mowiac, rzadko sie je stosuje 20:24 <@sempaikari> Blizzard: cii uczymy sie[; 20:25 -!- mode/#gynkurs [-o Blizzard] by Blizzard 20:25 <@Gynvael> nie bede sie teraz zaglebial co do typu wskaznika jakim jest int a[2][10]; (stalym, wskazujacyn na 10 elementowa tablice intow) 20:25 <@Gynvael> to jest temat na oddzielna dyskusje i moze oddzielny wyklad 20:25 <@Gynvael> dodam tylko ze rzad a[1] jest w pamieci BEZPOSREDNIO ZA rzedem a[0] 20:26 <@Gynvael> jakie sa tego implikacje ? 20:26 <@Gynvael> int a[2][10]; 20:26 <@Gynvael> takie ze 20:26 <@Gynvael> a[0][10] to jest a[1][0]; 20:26 <@Gynvael> a 20:26 <@Gynvael> a[0][15] to jest a[1][5]; 20:26 <@Gynvael> ;> 20:26 <@Gynvael> wiec jak sie przesadzi 20:26 <@Gynvael> to mozna sobie nieeeezle namieszac 20:26 <@Gynvael> ok 20:26 <@Gynvael> teraz punkt kulminacyjny programu 20:26 <@d0b0c0p> Gynvael: moge pytanko? 20:26 <@Gynvael> hm 20:26 <@Gynvael> no to punkt kulminacyjny za chwile 20:27 <@d0b0c0p> krotkie 20:27 <@Gynvael> teraz pytania 20:27 -!- mode/#gynkurs [-m] by Gynvael 20:27 <@Gynvael> pytac ;> 20:27 < Blizzard> nikt sie nie kwapi;] 20:27 <@d0b0c0p> jaki ma typ wskaznik w tablicy 2-wymiarowej? **a? 20:27 < Blizzard> trza bedzie symfonie przeczytac :) 20:27 <@Gynvael> d0b0c0p: nie nie jest to int** ;> 20:28 <@d0b0c0p> zwylke int*? 20:28 <@Gynvael> d0b0c0p: jest to int (*a)[10] bodajze ;> 20:28 <@Gynvael> e 20:28 <@Gynvael> d0b0c0p: jest to int (const *a)[10] bodajze ;> 20:28 <@Gynvael> jakos tak 20:28 <@Gynvael> ;p 20:28 <@Gynvael> no 20:28 <@Gynvael> niewazne 20:28 <@Gynvael> staly i koneic 20:28 <@Gynvael> ;> 20:28 <@PixelX_> moze mi ktos wyslac logi na pix3lx@gmail.com? bede wdzieczny 20:28 <@d0b0c0p> PixelX_: sa na stronie 20:28 <@PixelX_> jakiej ? :> 20:28 <@adam__i> Gynvael: ja jest ustwine w pamici te dow elemnotwo a[0][1] a[0][2] czy a[0][1] a[1][1] 20:29 <@sempaikari> d0b0c0p:jakiej?;> 20:29 <@d0b0c0p> topic 20:29 <@Gynvael> adam__i: to pierwsze 20:29 <@Gynvael> adam__i: a[0][1], a[0][2], etc 20:29 <@sempaikari> qrfa zamulenie totalne 20:29 <@d0b0c0p> http://salv4tion.ath.cx/~adam/gynkurs/ 20:29 <@Gynvael> sempaikari: ? 20:29 <@m4shed> Gynvael to co to jest **costam jest takie cos?? 20:30 <@sempaikari> nie no wiem ale.. nie widzialem predzje 20:30 <@m4shed> hmm np.: int main(int argc, char **argv) 20:30 <@Gynvael> m4shed: powiem za 3 sec o tym 20:30 <@Gynvael> m4shed: kk ? 20:30 <@m4shed> k spoko 20:30 <@m4shed> ;] 20:30 <@Gynvael> jeszcze jakies pytania ? 20:30 <@d0b0c0p> tez bym prosi o wyjasnienie **ble ;] 20:30 <@sempaikari> no questnions 20:30 <@Gynvael> ok 20:30 <@salv4tion> [; 20:30 <@sempaikari> idle.. 20:30 <@salv4tion> hmm 20:30 <@m4shed> ;] 20:30 <@Gynvael> tyo lecimy 20:30 -!- mode/#gynkurs [+m] by Gynvael 20:30 <@Gynvael> wiec 20:30 <@salv4tion> ne chyba choc nie czytalem 20:30 <@salv4tion> ;p 20:30 <@Gynvael> int a; 20:31 <@Gynvael> "a" jest zmienna typu int 20:31 <@Gynvael> int a, *b; b = &a; 20:31 <@Gynvael> b jest wskaznikiem na "a", czyli zmienna typu int 20:31 <@Gynvael> int a, *b, **c; b = &a; c = &b; 20:31 <@Gynvael> c jest WSKAZNIKIEM NA WSKAZNIK NA ZMIENNA TYPU INT 20:31 <@Gynvael> czyli 20:31 <@Gynvael> *c odnosi sie do rzeczy na ktora wskazuje, czyli b 20:32 <@Gynvael> a **c odnosi sie do rzeczy na ktora wskazuje wskazywany wskaznik ;ppppp 20:32 <@Gynvael> czyli 20:32 <@Gynvael> **c == *b 20:32 <@Gynvael> po kolei ;> 20:32 * Crousader Oo 20:32 <@Gynvael> a = 12; 20:32 <@Gynvael> b = &a; <=- b wskazuje na "a" 20:32 <@Gynvael> c = &b; <=- c wskazuje na "b" 20:32 <@m4shed> c = &b 20:32 <@d0b0c0p> ciiii 20:32 <@m4shed> sorry ;] 20:32 <@Gynvael> **c = 13; to jest... 20:32 <@Gynvael> *(*c) = 13; 20:33 <@Gynvael> jak mowilem *c odnosi sie do tego na co wskazuje "c", a "c" wskazuje na "b" 20:33 <@Gynvael> czyli 20:33 <@Gynvael> *(b) = 13; 20:33 <@Gynvael> czyli 20:33 <@Gynvael> *b = 13; 20:33 <@Gynvael> *b odnosi sie do "a" wiec 20:33 <@Gynvael> a = 13; 20:33 <@Gynvael> taki jest koncowy SENS tego zapisu 20:33 <@d0b0c0p> a jesli bys dal *c? 20:33 * Crousader sie smieje :D 20:33 -!- mode/#gynkurs [-o Crousader] by salv4tion 20:33 <@Gynvael> d0b0c0p: to mozesz zmienic wskaznik, na przyklad: 20:33 <@Gynvael> int a, b, *c, *d, **e; 20:33 <@d0b0c0p> adres tego wskaznika? 20:33 -!- PixelX_ [~pix@dsl137.neoplus.adsl.tpnet.pl] has quit ["Lost terminal"] 20:33 <@Gynvael> c = &a; 20:33 <@Gynvael> d = &b; 20:33 <@Gynvael> e = &c; 20:33 <@nietopesz> jak to? a najpierw bylo 12 pozniej 13?? 20:34 <@Gynvael> *e = &b; 20:34 -!- gripeq [grip@praganet.pl] has left #gynkurs [] 20:34 <@Gynvael> i juz c wskazuje na "b" a nie na "a" 20:34 <@Gynvael> nietopesz: to jest =, znak NADANIA, nie ==, znak rownosci ;> 20:34 <@d0b0c0p> czajem thx 20:34 <@Gynvael> ok 20:34 <@Gynvael> moge dalej ? 20:34 <@d0b0c0p> sure man 20:35 <@m4shed> tak 20:35 <@Gynvael> ok 20:35 <@adam__i> ta 20:35 <@Gynvael> wazna rzecz 20:35 <@Gynvael> o ktorej zapomnialem ostatni 20:35 <@Gynvael> *ostatnio 20:35 <@Gynvael> KAZDY wskaznik ma taka sama wielkosc 20:35 <@Gynvael> wkoncu WSKAZNIK to ADRES 20:35 <@Gynvael> a pamiec to zawsze ta sama pamiec 20:35 <@Gynvael> wiec adres w niej zapisuje sie ZAWSZE tak samo 20:36 <@Gynvael> dla naszych prockow - x386, sizeof(dowolny wskaznik) to 4 20:36 <@Gynvael> rowniez sizeof(int*********) to 4 20:36 <@Gynvael> KAZDY WSKAZNIK MA 32 BITY NA NASZYCH PROCKACH 20:36 <@Gynvael> to raz 20:36 <@Gynvael> dwa, to typ void 20:36 <@Gynvael> NIE MOZNA UTWORZY ZMIENNEJ TYPU VOID 20:36 <@Gynvael> void - nic, proznia 20:36 <@Gynvael> ALE 20:36 <@Gynvael> MOZNA UTWORZY WSKAZNIK NA NICOSC 20:36 <@Gynvael> void *a; 20:36 <@Gynvael> po co to cholerstwo ? 20:37 <@Gynvael> jesli nie jestesmy pewnie na jaki typ mamy wskazywac, wtedy uzywamy wskaznika na nicosc ;> 20:37 <@Gynvael> a potem sobie rzutujemy 20:37 <@Gynvael> przykladowo 20:37 <@Gynvael> int a, *b; 20:37 <@Gynvael> void *c; 20:37 <@Gynvael> c = (void*) &a; 20:37 <@Gynvael> b = (int*) c; 20:37 <@m4shed> przydaje sie to chyba w wskaznikach do funkcji 20:38 <@Gynvael> (void*) to ZMIANA TYPU, w sumie totalnie nic nie robi, tylko informuje kompilator ze to po prawej stronei nawiasu () ma przez chwile braz za okreslony typ wskaznika 20:38 <@Gynvael> m4shed: na przyklad ;> 20:38 <@m4shed> ;] 20:38 <@Gynvael> ogolnie przydaje sie przy bardzo wielu rzeczach 20:38 <@Gynvael> ok 20:38 <@Gynvael> i ostatnia rzecz 20:38 <@Gynvael> ADRESEM PUSTY, ZEROWYM, jest NULL 20:38 <@d0b0c0p> jesli dam c + 1 to o ile bajtow przesunie? 20:38 <@Gynvael> np 20:38 <@Gynvael> int *a = NULL; 20:39 <@Gynvael> mowi sie ze "a nie wskazuje ne nic" 20:39 <@Gynvael> d0b0c0p: to jest blad skladni wtedy ;> 20:39 <@d0b0c0p> thx 20:39 <@Gynvael> NULL jest zadeklarowany jako (void*)0 ; 20:39 <@Gynvael> ;> 20:39 <@Gynvael> czyli adres zerowy ;> 20:39 -!- Rincewin [oooooooooo@aot237.neoplus.adsl.tpnet.pl] has joined #gynkurs 20:39 -!- mode/#gynkurs [+o Rincewin] by phoe 20:39 -!- Crousader [~Amadheus@ann86.internetdsl.tpnet.pl] has left #gynkurs [Leaving] 20:40 <@Gynvael> (powiedzmy ze mamy bardzo wysoka pewnosc ze NIGDY nie skorzystamy z adresu zerowego piszac normalne programy (co innego systemy operacyjne)) 20:40 -!- Crousader [~Amadheus@ann86.internetdsl.tpnet.pl] has joined #gynkurs 20:40 -!- mode/#gynkurs [+o Crousader] by phoe 20:40 <@Gynvael> ok 20:40 <@Gynvael> to byly 3 wazne rzeczy 20:40 <@Crousader> :] 20:40 <@Gynvael> teraz pobawmy sie chwile z napisami stalymi 20:40 <@Gynvael> czyli 20:40 <@Gynvael> "ala ma kota" 20:40 <@Gynvael> pytanie brzmi, co to jest "ala ma kota" 20:40 <@Crousader> strinig xD 20:40 -!- Crousader [~Amadheus@ann86.internetdsl.tpnet.pl] has left #gynkurs [Leaving] 20:40 <@Gynvael> wiekszosc poczatkujacych programistow MYLNIE uwaza ze jest to STALA WARTOSC TEXTOWA 20:41 -!- mode/#gynkurs [+o Blizzard] by d0b0c0p 20:41 <@Gynvael> tak do konca nie jest 20:41 <@Blizzard> !deop 20:41 <@sempaikari> widzialem podobneprzyklady w biblioteczkach komputer sw 20:41 <@sempaikari> [; 20:41 <@Blizzard> !deop Blizzard 20:41 -!- mode/#gynkurs [-o Blizzard] by laciek 20:41 <@m4shed> hmm char *text[] = {"ala ma kota"}; 20:41 -!- mode/#gynkurs [-o Blizzard] by kader 20:41 -!- mode/#gynkurs [-o laciek] by kader 20:41 <@m4shed> tak na przyklad?? 20:41 <@m4shed> mozna zapisac 20:41 -!- Crousader [~Amadheus@ann86.internetdsl.tpnet.pl] has joined #gynkurs 20:41 -!- mode/#gynkurs [+o Crousader] by phoe 20:41 -!- mode/#gynkurs [+o Blizzard] by kader 20:41 <@Blizzard> lol;] 20:41 <@d0b0c0p> ciiii 20:41 <@Gynvael> zapis "ala ma kota" to STALY ADRES MIEJSCA W PAMIECI GDZIE ZNAJDUJE SIE CIAG BAJTOW ala ma kota\0 20:41 <@Gynvael> czyli POINTER ;> 20:41 <@sempaikari> qrte 20:41 <@Gynvael> a dokladniej: const char const * 20:41 <@sempaikari> moze minutka pytan? 20:41 <@Blizzard> !/op laciek 20:41 -!- mode/#gynkurs [+o laciek] by Blizzard 20:41 -!- Rincewin is now known as R1nc3wind 20:42 <@Gynvael> co sie bawicie botami ?:P 20:42 <@Gynvael> ok 20:42 <@Gynvael> teraz chwila pytan 20:42 <@Blizzard> Gynvael: e tam:P 20:42 <@Gynvael> i potem dalej zabawa z "" 20:42 <@Blizzard> bitchx 20:42 <@Blizzard> ;x 20:42 -!- mode/#gynkurs [-m] by Gynvael 20:42 <@Blizzard> !p #gynkurs 20:42 -!- laciek [blizzard@mydevil.net] has left #gynkurs [IrC-F TEAM] 20:42 -!- kader [blizzard@mydevil.net] has left #gynkurs [IrC-F TEAM] 20:42 <@d0b0c0p> Blizzard: sam jestes bitch :P 20:42 <@sempaikari> Pytanie jak to jest z tymi kursami umawiacie sie na nie czy jak? 20:42 <@Blizzard> chcecie boty;D? 20:42 <@Blizzard> ;) 20:42 <@m4shed> Gynvael czyli tak moze byc: char *text[] = { "Ala ma kota" }; 20:42 <@d0b0c0p> Blizzard: po kursie... ;] 20:42 <@Blizzard> d0b0c0p: llol ok;) 20:42 <@Gynvael> sempaikari: umawiamy, na koncu jest glosowanie 20:43 <@Gynvael> sempaikari: komu o ktorej pasuje etf 20:43 <@Gynvael> *Etc 20:43 <@Gynvael> m4shed: moze, ale troche ryzykujesz ;> 20:43 <@sempaikari> Gynvael: ile do konca? bo mam na rano do sql a 30 km do sql[;? 20:43 <@m4shed> czemu? 20:43 <@Gynvael> m4shed: bo przy probie zmiany, np text[0][1] = 'x'; masz seg faulta ;> 20:43 <@m4shed> sempaikari, nikt cie tu nie trzyma 20:43 <@m4shed> aha 20:43 <@Gynvael> sempaikari: o 23 koniec 20:44 <@sempaikari> Gynvael: a czy ja to powiedzialem? ja tylko sie pytam ile do konca 20:44 <@Gynvael> sempaikari: nastepny kurs bedzie cos kolo poniedzialku dopiero 20:44 <@m4shed> czyli lepiej podac ilosc znakow w talibcy?? 20:44 <@sempaikari> Gynvael: dzikei m4shedooj nie uiprzejmy:P 20:44 <@Gynvael> sempaikari: ee to m4shed powiedzial ;p nie ja ;p 20:44 <@phoenix__> Gynvael: czemu w pon ? 20:44 <@d0b0c0p> m4shed: bez "*" i bedzie ok 20:44 <@Gynvael> m4shed: tak, ale o tym bedzie za chwile 20:44 <@sempaikari> Gynvael: ty jestes b.uprzejmy[; 20:44 <@Gynvael> phoenix__: bo przez weekend mnie nie ma ;> 20:44 <@d0b0c0p> np char text[] = { "ala ma kota, a kot ma ale" }; 20:44 <@Gynvael> dobra 20:44 <@Gynvael> jakies pytania jeszcze ? 20:45 <@d0b0c0p> chyba nie 20:45 <@Gynvael> d0b0c0p: char text[] = "ala ma kota" jest poprawniejszym zapisam, ale o tym zaraz 20:45 <@Gynvael> ok 20:45 <@Gynvael> to lecimy 20:45 <@phoenix__> ja sie zwijam 20:45 <@pxelx> hf ja ntc gw 20:45 -!- mode/#gynkurs [+m] by Gynvael 20:45 <@d0b0c0p> papa 20:45 <@m4shed> char text[32] = {ala ma kota}; o tak? 20:45 <@Gynvael> teraz tak 20:45 <@Gynvael> pa phoenix__ 20:45 <@m4shed> ;] 20:45 <@phoenix__> bede z logow czytal 20:45 <@phoenix__> to cya all 20:45 -!- pxelx [~user@dsl137.neoplus.adsl.tpnet.pl] has quit [""] 20:45 <@Gynvael> m4shed: eh poczekaj cierpliwie 20:45 <@phoenix__> pa Gyn 20:45 <@Gynvael> ;> 20:45 <@m4shed> kk juz nie bede :] 20:45 <@Gynvael> ok 20:45 <@Gynvael> wiec 20:45 -!- phoenix__ [~phoenix@cdo24.neoplus.adsl.tpnet.pl] has quit ["moj bot mi logi da albo adam_i ;P"] 20:46 <@Gynvael> "ala ma kota" to STALY WSKAZNIK na MIEJSCE W PAMIECI GDZIE JEST CIAG BAJTOW "ala ma kota\0" 20:46 <@Gynvael> co to za tajemnicze "\0" ? 20:46 <@Gynvael> to jest tak zwany "nul", bajt zerowy 20:46 <@Gynvael> w jezyku C, i nie tylko zreszta, jako "napisy" uzywane sa tak zwane stringii ASCIIZ 20:46 <@Gynvael> czyli ASCII String, Zero-terminated 20:47 <@Gynvael> ciag znakow ASCII (o tym bylo na #2 bodajze) zakonczony bajtem zerowym 20:47 <@Gynvael> dzieki temu bajtowi wiemy gdzie jest koneic napisu 20:47 <@Gynvael> tak dopowiem jeszcze 20:47 <@Gynvael> w tablicy NIE JEST NIGDZIE ZAPISANA JEJ WIELKOSC 20:47 <@Gynvael> i to nalezy zapamietac ;> 20:47 <@Gynvael> ok 20:47 <@Gynvael> teraz dalej 20:48 <@Gynvael> jak udowodnic ze "ala ma kota" to na prawde wskaznik ? 20:48 <@Gynvael> dosc prosto 20:48 <@Gynvael> wiecie ze puts("ala ma kota"); wypisze "ala ma kota" na ekranie 20:48 <@Gynvael> jako ze "ala ma kota" to niby ma byc wskaznik na char (staly) 20:48 <@d0b0c0p> printf("%d", "ala ma kota");? 20:48 <@Gynvael> to mozna by go przesunac w lewo badz w prawo o pare bajtow dodajac lub odejmujac cos 20:48 <@Gynvael> wiec 20:49 <@Gynvael> puts("ala ma kota" + 4); 20:49 <@Gynvael> to wypisze "ma kota" 20:49 <@Gynvael> mam nadzieje ze to was przekonuje hehehe ;> 20:49 <@Gynvael> a skad wiadomo ze na koncu jest \0 ? 20:49 -!- d13t3r^C0D3 [~x@g105.softel.elblag.pl] has left #gynkurs [] 20:49 <@d0b0c0p> Gynvael: a ten sposob co ja podalem? sorki, ze przerywam 20:49 <@Gynvael> wstawmy \0 recznie w srodek gdzies 20:50 <@Gynvael> i zobaaczmy co wyjdzie 20:50 <@Gynvael> d0b0c0p: to ci wyswietli liczbe ;> ale nie do konca jest to dowod ze to akurat wskaznik jest;> 20:50 <@Gynvael> puts("ala\0ma kota"); 20:50 <@Gynvael> to wypisze samo: ala 20:50 <@Gynvael> tak wiec DWIE WAZNE RZECZY: 20:50 <@m4shed> czyli tak jak mowiles \0 to konczy tekst? 20:51 <@Gynvael> "ala ma kota" <=- to jest STALY WSKAZNIK NA STALY NAPIS 20:51 <@Gynvael> "ala ma kota" <=- to jest NIEJAWNIE zakonczone znakiem \0 ktory konczy tekst 20:51 <@sempaikari> help away 20:51 <@Gynvael> m4shed: tak 20:51 <@m4shed> k 20:51 <@Gynvael> sizeof("ala") poda 4 20:51 <@Gynvael> nie 3 20:51 <@Gynvael> powniewaz kompilator wie ze "ala" to tak na prawde { 'a', 'l', 'a', '\0' } 20:51 <@d0b0c0p> i to mnie troszke dziwi 20:52 <@Gynvael> d0b0c0p: czemu ? 20:52 <@Gynvael> ;> 20:52 <@adam__i> To w sie wskaznika podaje wilkosc mijsca pod tym wkaznikem ? 20:52 <@adam__i> *sizeof 20:52 <@d0b0c0p> adam__i: tak samo myslalem 20:52 <@Gynvael> ;> 20:52 <@Gynvael> o wlasnie 20:52 <@Gynvael> dobrze ze wspomnieliscie 20:52 <@Gynvael> jesli chodzi o "" 20:52 <@Gynvael> to to jest wyjatek 20:52 <@Gynvael> moze lepiej traktujmy to nie jako const char const * 20:52 <@d0b0c0p> (w tablicach jest tez wyjatek ;>) 20:52 <@Gynvael> a const char[] ;> 20:53 <@m4shed> hmm {"ala"} -> poda 4 {'a', 'a', 'a'} -> poda 3 tak?? 20:53 <@Gynvael> dzieki temu jasne bedzie ze sizeof() poda ilosc bajtow ;> 20:53 <@Gynvael> m4shed: tak, dokladnie 20:53 <@m4shed> thx 20:53 <@Gynvael> ok 20:53 <@Gynvael> teraz lecimy dalej 20:53 <@Gynvael> podstawowe typy zmiennych 20:53 <@Gynvael> char *a = "ala ma kota"; 20:53 <@Gynvael> char b[] = "ala ma kota"; 20:53 <@Gynvael> char c[15] = "ala ma kota"; 20:54 <@Gynvael> teraz co jest co 20:54 <@Gynvael> char *a.... to WSKAZNIK NA STALE MIEJSCE W PAMIECI GDZIE JEST "ala ma kota" 20:54 <@Gynvael> na 80% systemow i kompilatorow proba zmienienia tego na co wskazuje "a" zakonczy sie wywaleniem programu (Program wykonal nieprawidlowa operacje i zostanie zakonczony... badz "Segmentation fault") 20:54 <@m4shed> Gyn ja tez sorry ze przerwe ale mowiles ze char b[]; nie moze byc 20:55 <@m4shed> cchyba ze chodzilo o typ int 20:55 <@Gynvael> m4shed: ah ;> 20:55 <@Gynvael> m4shed: i widzisz ;> 20:55 <@Gynvael> m4shed: tu jest roznica ;> 20:55 <@Gynvael> m4shed: ja nie napisalem char b[]; 20:55 <@Gynvael> tylko char b[] = "costam"; 20:55 <@Gynvael> ;> 20:55 <@m4shed> ok ;]no tak 20:55 <@Gynvael> co to jest to b[] ? 20:55 <@Gynvael> najpierw czym to nie jest, a zz czym to jest mylone 20:56 <@Gynvael> to NIE JEST NIESKONCZONA TABLICA O NIEOKRESLONEJ WIELKOSCI 20:56 <@Gynvael> jedynym wypadkiem kiedy mozemy NIE PODAWAC WIELKOSCI jest moment w ktorym INICJALIZUJEMY tablice 20:56 <@Gynvael> wtedy kompilator SAM WSTAWI ODPOWIEDNIA WARTOSC W [] 20:57 <@Gynvael> wiec 20:57 <@Gynvael> char b[] = "ala ma kota"; 20:57 <@Gynvael> kompilator przy kompilacji automagicznie i niejawnie przerobi to na 20:57 <@Gynvael> char b[12] = "ala ma kota"; 20:57 <@Gynvael> PO CZYM przekopiuje string "ala ma kota" DO TEJ TABLICY 20:57 <@Gynvael> napisanie char b[] = "ala ma kota" KOPIUJE STRING TYLKO I WYLACZNIE PODCZAS DEKLARACJI ZMIENNEJ 20:57 <@Gynvael> przykladowo 20:57 -!- lemix [~lemixx@proxy.iginet.net] has quit ["spaaac"] 20:57 <@Gynvael> char c[15]; 20:58 <@Gynvael> c = "ala ma kota"; <=- to jest blad kompilacji 20:58 <@Gynvael> ;> 20:58 <@Gynvael> ok 20:58 <@Gynvael> char c[15] = "ala ma kota"; 20:58 -!- R1nc3wind [oooooooooo@aot237.neoplus.adsl.tpnet.pl] has quit [""] 20:58 <@Gynvael> to jest stworzenie tablicy 15 char'ow i skopiowanie do niej napisu "ala ma kota" 20:58 <@Gynvael> oczywiscie we wszystkich wypadkach napis konczony jest \0 20:59 <@Gynvael> we wszystkich 3ch wypadkach mozna napisac: 20:59 <@Gynvael> puts(a); 20:59 <@Gynvael> puts(b); 20:59 <@Gynvael> puts(c); 20:59 <@Gynvael> dodatkowo 20:59 <@Gynvael> jako ze "a" jest WSKAZNIKIEM, to mozna zmieniac jego wartosc 20:59 <@Gynvael> np 20:59 <@Gynvael> char *a; 20:59 <@Gynvael> a = "ala ma kota"; 20:59 <@Gynvael> puts(a); 20:59 <@Gynvael> a = "kto ma ale"; 20:59 <@Gynvael> puts(a); 21:00 <@Gynvael> to jest po prostu zapisanie adresu do zmiennej typu adres 21:00 <@Gynvael> powtorze jeszcze raz ze bledem by bylo napisanie 21:00 <@Gynvael> char a[15]; 21:00 <@Gynvael> a = "ala ma kota"; 21:00 <@Gynvael> C nie kopiuje automagicznie tablic 21:00 <@Gynvael> to oznacza ze 21:00 <@Gynvael> char a[10], b[10]; 21:00 <@Gynvael> a = b; 21:00 <@Gynvael> rowniez jest bledem 21:00 <@Gynvael> sa na to inne sposoby ;> 21:00 <@Gynvael> ok 21:00 <@Gynvael> teraz tak 21:00 <@Gynvael> char a[] = "ala ma kota"; 21:00 <@Gynvael> puts(a); 21:01 <@Gynvael> a[3] = '\0'; (zmienilem spacje po "ala.. na \0) 21:01 <@Gynvael> puts(a); 21:01 <@Gynvael> pierwszy puts wypisze "ala ma kota" 21:01 <@Gynvael> drugi "ala" 21:01 <@Gynvael> jako ze zakonczenie wstawilismy wczesniej ;> 21:01 <@Gynvael> teraz inna zabwa 21:01 <@Gynvael> char *a, b[] = "ala ma kota"; 21:02 <@Gynvael> a = b; <=- tak mozemy zrobic, wtedy a wskazuje na pierwszy element tablicy b, czyli znak "a" 21:02 <@Gynvael> a += 3; 21:02 <@Gynvael> *a = '\0'; 21:02 <@Gynvael> co zrobilem ? 21:02 <@Gynvael> po kolei 21:02 <@Gynvael> "ala ma kota" 21:02 <@m4shed> czyli pojawi sie ala?? 21:02 <@Gynvael> a = b;, od teraz a wskazuje na literke "a", zaznacze 21:02 <@Gynvael> m4shed: tak 21:02 <@Gynvael> "[a]la ma kota" 21:02 <@m4shed> ;] 21:02 <@Gynvael> to zaznaczone to jest to na co wskazuje wskaznik "a" 21:02 <@Gynvael> a += 3; 21:03 <@Gynvael> przesuwam adres "a" o 3 bajty, 3 * sizeof(char) = 3 ;> 21:03 <@Gynvael> "ala[ ]ma kota" 21:03 <@Gynvael> *a = '\0'; <=- to na co wskazuje "a" zmieniam na '\0' 21:03 <@Gynvael> jak widac a wskazuje na spacje wiec... 21:03 <@Gynvael> "ala[\0]ma kota" 21:03 <@Gynvael> puts(b) i wypisze "ala" 21:03 <@Gynvael> ale pobawmy sie dalej 21:03 <@Gynvael> a++; 21:04 <@Gynvael> "ala\0[ma] kota" 21:04 <@Gynvael> "ala\0[m]a kota" 21:04 <@Gynvael> no tak ;. 21:04 <@Gynvael> puts(a); 21:04 <@Gynvael> wypisze "ma kota" 21:04 <@Gynvael> ok 21:04 <@Gynvael> teraz jeden fakt co do puts, printf, str* etc 21:04 <@Gynvael> WSZYSTKIE TE FUNKCJE ZNAK \0 TRAKTUJA JAKO KONIEC NAPISU 21:04 <@Gynvael> co wiecej, TYLKO I WYLACZNIE PO TYM ZNAKU POZNAJA KONIEC NAPISU ;> 21:04 <@Gynvael> ok 21:04 <@Gynvael> teraz chwila pytan 21:05 <@Gynvael> a za chwile troche funkcji ze string.h i wytlumaczenie ich dzialania 21:05 -!- mode/#gynkurs [-m] by Gynvael 21:05 <@d0b0c0p> ja mam 21:05 <@d0b0c0p> [22:21] char *a; 21:05 <@d0b0c0p> [22:21] a = "ala ma kota"; 21:05 <@d0b0c0p> [22:21] puts(a); 21:05 <@d0b0c0p> [22:21] a = "kto ma ale"; 21:05 <@d0b0c0p> [22:21] puts(a); 21:05 <@d0b0c0p> czy tu sie zmeni adres a? 21:05 -!- sempaikari is now known as sempaikari`aw 21:05 <@Gynvael> tu sie zmieni wartosc "a", czyli to na co "a" wskazuje ;> 21:05 <@d0b0c0p> tzn. czy adres a = "ala ma ktota", bedzie rozny od a= "kto ma ale";? 21:06 <@sempaikari`aw> cya ziomy poczytam logi tomorrow 21:06 <@Gynvael> d0b0c0p: chodzi ci czy a przed == a po ? 21:06 <@Gynvael> pa sempaikari`aw 21:06 <@d0b0c0p> po przypisaniu 21:06 <@Gynvael> d0b0c0p: przed i po wartosci a SA ROZNE ;> 21:06 <@Gynvael> jako ze rozne sa adresy w pamieci napisu "ala ma kota" i "kot ma ale" 21:07 <@Gynvael> (nie moga byc takei same, bo by na siebie nachodizly) 21:07 <@d0b0c0p> jarze ;] 21:07 <@d0b0c0p> thX 21:07 <@d0b0c0p> c.d.? 21:07 <@m4shed> jeszcze jakies pytania ?? :] 21:07 <@m4shed> jak nie to jedziemy dalej :p 21:07 <@Gynvael> ok 21:07 <@Gynvael> to jedziemy 21:08 -!- mode/#gynkurs [+m] by Gynvael 21:08 <@Gynvael> ok 21:08 <@Gynvael> wiec dwa odwieczne pytania: 21:08 <@Gynvael> 1) 21:08 <@Gynvael> jak zrobic w takim razie: 21:08 <@Gynvael> char a[15]; 21:08 <@Gynvael> a = "ala ma kota"; 21:08 <@Gynvael> skoro tak nie wolno ? 21:08 <@Gynvael> najprosciej uzyc funkcji strncpy z (na poczatku wymagany #include) 21:09 <@kiero> ja spadam 21:09 <@kiero> cya 21:09 <@Gynvael> strncpy(a, "ala ma kota", 15); 21:09 <@Gynvael> pa kiero 21:09 <@d0b0c0p> a czemu nie strcpy, chodzi o buffer overflow? :) 21:09 <@Gynvael> funkcja ta SKOPIUJE MAXIMUM 15 znakow z napisu "ala ma kota" do tablicy a, z tym ze funkcja konczy dzialanie na '\0' 21:09 <@Gynvael> d0b0c0p: tak ;> chodzi o buffer overflow 21:10 <@Gynvael> ok 21:10 <@Gynvael> to jedna sprawa 21:10 <@Gynvael> mozna by uzyc funkcji strcpy(a, "ala ma kota"), jesli jestesmy pewni ze w "a" na 100% zmiesci sie napis "ala ma kota" 21:11 <@Gynvael> ok 21:11 <@Gynvael> 2) 21:11 <@Gynvael> jak powrownac dwa napisy ? nie mozna wkoncu zrobic: 21:11 <@Gynvael> char a[] = "ala ma kota"; 21:11 <@Gynvael> if( a == "ala ma kota" ) 21:11 <@Gynvael> wkoncu a i "ala ma kota" to POINTERY o ZUPELNIE ROZNYCH WARTOSCIACH 21:11 <@Gynvael> wiec jak zrobic ? 21:11 <@Gynvael> tym razem z pomoca przychodzi funkcja strcmp 21:12 <@Gynvael> if( strcmp(a, "ala ma kota") == 0 ) 21:12 <@Gynvael> FUNKCJA ZWRACA 0 JESLI STRINGI SA ROWNE!!! 21:12 <@Gynvael> taka uwaga jeszcze 21:12 <@Gynvael> strcpy to od String Copy 21:12 <@Gynvael> a strcmp to of String Compare (porownanie stringow) 21:12 <@Gynvael> *od 21:12 <@Gynvael> co do punktu 1) 21:12 <@Gynvael> mozna uzyc rowniez funkcji sprintf 21:13 <@Gynvael> dzialajacej analogicznie do printf, ale zamiast wyswietlajacej na ekran, to kopiujacej do tablicy 21:13 <@Gynvael> np 21:13 <@Gynvael> sprintf(a, "ala ma kota"); 21:13 <@Gynvael> albo 21:13 <@Gynvael> sprintf(a, "%s", "ala ma kota"); 21:13 <@Gynvael> oba warianty sa poprawne 21:13 <@nietopesz> ja sie dzis poddaje. mam zaleglosci gdzie moge je nadrobic. 21:13 <@Gynvael> "a" jest docelowa tablica 21:13 <@nietopesz> z archiwum kursow?? 21:13 <@Gynvael> nietopesz: tak 21:13 <@nietopesz> dzieki jeszcze tu wpadne 21:14 <@Gynvael> ;> 21:14 -!- nietopesz [~nietopesz@yu38.internetdsl.tpnet.pl] has left #gynkurs [Leaving] 21:14 <@m4shed> Gyn moge sie zapytac?? 21:14 <@Gynvael> ok 21:14 -!- mode/#gynkurs [-m] by Gynvael 21:14 <@d0b0c0p> do czego jest skrot sprintf? 21:14 <@Gynvael> pytania ? 21:14 <@d0b0c0p> * od 21:14 <@Gynvael> d0b0c0p: string print formated 21:14 <@m4shed> 22:32 <@Gynvael> mozna by uzyc funkcji strcpy(a, "ala ma kota"), jesli jestesmy 21:14 <@m4shed> pewni ze w "a" na 100% zmiesci sie napis "ala ma kota" 21:14 <@m4shed> 22:32 <@Gynvael> mozna by uzyc funkcji strcpy(a, "ala ma kota"), jesli jestesmy 21:14 <@m4shed> pewni ze w "a" na 100% zmiesci sie napis "ala ma kota" 21:14 <@m4shed> sorry dwarazy 21:14 <@Gynvael> d0b0c0p: czyli w bardzo wolnym tlumaczeniu "sformatowane drukowanie do stringu" 21:14 <@d0b0c0p> Gynvael: :) 21:14 <@Gynvael> m4shed: i ? 21:15 <@m4shed> czyli jesli a[12]; 21:15 <@m4shed> ?to wtedy mozna uzyc strcpy 21:15 <@Gynvael> aha, owiele lepiej uzywac snprintf(a, 15, "ala ma kota"), czyli wersji z ograniczeniem 21:15 <@Gynvael> m4shed: tak 21:15 <@Gynvael> m4shed: 12 lub wiecej 21:15 <@Gynvael> m4shed: ALE jesli dane pobierasz od UZYTKOWNIKA, to nie waz sie uzywac strcpy ;> 21:15 <@Gynvael> m4shed: bo cie po prostu wyexploituje ;p 21:15 <@m4shed> k 21:16 <@m4shed> dobra ide 21:16 -!- d13t3r^C0D3 [~x@g105.softel.elblag.pl] has joined #gynkurs 21:16 <@m4shed> bo stary krzyczy 21:16 <@Gynvael> ok 21:16 -!- mode/#gynkurs [+o d13t3r^C0D3] by phoe 21:16 <@Gynvael> pa m4shed ;> 21:16 <@Gynvael> ok 21:16 <@m4shed> kk dziki Gyn za wszystko 21:16 <@Gynvael> jeszcze pytania ? 21:16 <@Gynvael> n/p 21:16 <@d13t3r^C0D3> na czym staneliscie? 21:16 -!- m4shed is now known as m4shaway 21:16 <@Gynvael> d13t3r^C0D3: snprintf, strncpy, strcmp 21:16 <@Gynvael> jeszcze jakies pytanka ? 21:16 <@d0b0c0p> ne 21:17 <@Gynvael> jesli nie to przejde do wytlumaczenia dzialania dwoch ostatnich funkcji 21:17 -!- mode/#gynkurs [+m] by Gynvael 21:17 <@d13t3r^C0D3> a gdzie strstr, strchr ?? 21:17 <@Gynvael> ok 21:17 <@Gynvael> d13t3r^C0D3: po kolei 21:17 <@Gynvael> ok 21:17 <@Gynvael> a teraz 21:17 <@Gynvael> zalozmy ze chcemy sobie tak for fun 21:17 <@Gynvael> napisac wlasne strcpy 21:17 <@Gynvael> jak to zrobic ? 21:17 <@Gynvael> na czym to polega ? 21:17 <@Gynvael> wiec tak 21:17 <@Gynvael> pierwsza rzecz: 21:17 <@Gynvael> potrzebujemy 2 adresy 21:17 <@Gynvael> adres DOCELOWY, czyli tablicy gdzie kopiujemy 21:18 <@Gynvael> i adres ZRODLOWY, czyli skad kopiujemy napis 21:18 <@Gynvael> w sumie nic wiecej nie potrzebujemy (w wersji prostej) 21:18 <@Gynvael> i jakie bedzie dzialanie ? 21:18 <@d13t3r^C0D3> kopiowanie tablicy 21:18 <@Gynvael> ano bedziemy po prostu bajt po bajdzie przepisywac z ZRODLOWEJ do DOCELOWEJ, az nie natrafimy na \0 21:18 <@Gynvael> jak to zapisac ? 21:18 <@d0b0c0p> while((*src++ = *dest++)) { }; 21:18 <@Gynvael> void nasze_strcpy(char *dest, const char *src) { 21:19 -!- m4shaway [n3tdes@bsd.miki.eu.org] has quit [EOF From client] 21:19 <@d0b0c0p> na odwrot dalem :| 21:19 <@Gynvael> while( *src != '\0' ) *dest++ = *src++; 21:19 <@Gynvael> *dest = '\0'; 21:19 <@Gynvael> } 21:19 <@Gynvael> czyli 21:19 <@Gynvael> while( *src != '\0' ) <=- jesli wskaznik "src" nie wskazuje na bajt "nul.... 21:20 <@Gynvael> *dest++ = *src++; <=- skopiuj bajt i przesun oba wskazniki na nastepne bajty 21:20 <@Gynvael> *dest = '\0'; <=- na koniec wstaw terminator 21:20 <@Gynvael> mozna by zapisac tak jak d0b0c0p proponowal 21:20 <@Gynvael> while( (*dest++ = *src++) != '\0' ); 21:20 <@Gynvael> dalo by to identyczny efekt 21:21 <@Gynvael> ok 21:21 <@Gynvael> a teraz dzialanie na ilustracji 21:21 <@Gynvael> zalozmy ze mamy wywolanie: 21:21 <@Gynvael> nasze_strcpy( tablica, "ala" ) 21:22 <@Gynvael> tablica -> ??????????? "ala" -> ala\0 21:22 <@Gynvael> dest = tablica, src = "ala" 21:22 <@Gynvael> wiec 21:22 <@Gynvael> tablica -> [?]?????????? "ala" -> [a]la\0 21:22 <@Gynvael> czy 'a' to \0 ? nie, wiec kopiujemy 21:22 <@Gynvael> tablica -> [a]?????????? "ala" -> [a]la\0 21:22 <@Gynvael> przesuwamy oba wskazniki 21:22 <@Gynvael> tablica -> a[?]????????? "ala" -> a[la\0 21:22 <@Gynvael> tablica -> a[?]????????? "ala" -> a[l]a\0 21:22 <@Gynvael> czy 'l' to \0 ? nie, kopiujemy 21:22 <@Gynvael> tablica -> a[l]????????? "ala" -> a[l]a\0 21:23 <@Gynvael> przesuwamy 21:23 <@Gynvael> tablica -> al[????????? "ala" -> a[l]a\0 21:23 <@Gynvael> tablica -> al[?]???????? "ala" -> al[a]\0 21:23 <@Gynvael> czy 'a' to \0 ? 21:23 <@Gynvael> ne, kopiujemy i przesuwamy 21:23 <@Gynvael> tablica -> ala[?]??????? "ala" -> ala[\0] 21:23 <@Gynvael> czy \0 to \0 / 21:23 <@Gynvael> ? 21:23 <@Gynvael> tak! 21:23 <@Gynvael> koniec while 21:23 <@Gynvael> *dest = '\0'; 21:23 <@Gynvael> wrzucamy tam \0 21:23 <@Gynvael> tablica -> ala[\0]??????? "ala" -> ala[\0] 21:23 <@Gynvael> jak widac skopiowalo sie to co mialo do tablicy 21:24 <@Gynvael> nastepuje wyjscie z funkcji 21:24 <@Gynvael> ok 21:24 <@Gynvael> tak dizala to 21:24 <@Gynvael> jak zapisac strcmp ? 21:24 <@Gynvael> tez dostajemy dwa pointery 21:24 <@Gynvael> na jeden i drugi string 21:24 * Crousader sie obudzil ze snu w ktorym ktos go uczyl C 21:24 <@Gynvael> wystarczy teraz porownywac znaki az nie natknie sie w obu na \0 21:24 -!- seraphin_ [~seraphin@82.139.18.5] has joined #gynkurs 21:25 -!- mode/#gynkurs [+o seraphin_] by phoe 21:25 <@Gynvael> czyli 21:25 <@seraphin_> yyyyyyyyy????? 21:25 <@salv4tion> po kursie? 21:25 <@seraphin_> spoznilem si? 21:25 <@salv4tion> ciii 21:25 <@Gynvael> void nasze_strcmp( const char *a, const char *b ) { 21:25 <@d0b0c0p> seraphin_: to troche ;> zaczelo sie o 9 :P 21:25 <@Gynvael> (seraphin: noo ;> od 1:43 trwa) 21:25 <@seraphin_> kurwa... --; 21:26 <@Gynvael> while( *a != '\0' && *a == *b ) a++, b++; 21:26 <@Gynvael> return *a - *b; 21:26 <@Gynvael> } 21:26 <@Gynvael> czyli 21:27 <@Gynvael> "dopoki a i b sa rowne, i a nie jest rowne '\0', przesuwaj wskazniki" 21:27 <@Gynvael> czyli wyjscie z petli nastapi w momencie kiedy wskazywane litery beda sie roznic 21:27 * d0b0c0p imho powinno by return a - b; 21:27 -!- dentor1n [^l33t@anp31.neoplus.adsl.tpnet.pl] has quit [EOF From client] 21:27 <@Gynvael> badz jesli pod obydwoma wskaznikami wystapilo \0 21:27 <@Gynvael> potem jest return *a - *b; 21:27 <@Gynvael> czyli odjecie bajtow ktore sa pod obydwoma wskaznikami 21:28 <@Gynvael> jesli bajty te sa rowne (czyli musi to byc \0 i \0, bo inaczej nie wyszlo by z petli) 21:28 <@Gynvael> to zwroci 0 (czyli "sa rowne") 21:28 <@Gynvael> w kazdym innym wypadku zwroci wartosc rozna od zera 21:28 <@Gynvael> d0b0c0p: ne, jest dobrze, to sa pointery, a my odejmuyjemy to na co wskazuja, a nie ich wartosci ;> 21:28 <@Gynvael> ok 21:28 <@Gynvael> przyklad 21:29 <@Gynvael> nasze_strcmp("ala", "aaa")... 21:29 <@Gynvael> a -> ala\0 b -> aaa\0 21:29 <@Gynvael> a -> [a]la\0 b -> [a]aa\0 21:29 <@Gynvael> ok ? ok, jedziemy dalej 21:29 <@Gynvael> a -> a[l]a\0 b -> a[a]a\0 21:29 <@Gynvael> ok ? nie, l != a 21:29 <@Gynvael> wyjdzie z petli 21:29 <@Gynvael> return 'l' - 'a'; 21:30 <@Gynvael> no coz, nie wazne ile zwroci, zero to to nie bedzie ;> 21:30 <@Gynvael> wiec dziala 21:30 <@Gynvael> ok 21:30 <@Gynvael> pytania ? 21:30 -!- mode/#gynkurs [-m] by Gynvael 21:30 <@d0b0c0p> nom 21:30 <@d0b0c0p> czemu dalest const char *? 21:30 <@d0b0c0p> * dales 21:30 <@Gynvael> trafne pytanie 21:30 <@Crousader> a czemu nie:) 21:30 <@Gynvael> to jest taka w sumie umowa 21:30 <@d13t3r^C0D3> ja mam pytanie: czy ktos robi loga i czy beda source nastronie kursu? 21:31 <@Gynvael> ze jesli funkcja NIE ZMIENIA TEGO NA CO WSKAZUJE WSKAZNIK, to daje sie "const" (stale) 21:31 <@Gynvael> to taka informacja dla programisty, ze nic sie jego tablicy nie stanie ;> 21:31 <@Gynvael> d13t3r^C0D3: robia loga 21:31 <@d0b0c0p> aha... czyli takie umowne? :) 21:31 <@seraphin_> a zmienna mozna tam wsadzic? 21:31 <@Gynvael> d0b0c0p: to raz, dwa, kompilator ci blad wyrzuci jak sprobojesz zmienic 21:31 <@Gynvael> seraphin_: tzn ? 21:31 <@d0b0c0p> Gynvael: fakt :) 21:32 <@adam__i> Niepotrzbne wlonczlem consloe I editplusa 21:32 <@d13t3r^C0D3> ile do konca dzisiejszej lekcji? 21:32 <@Gynvael> d13t3r^C0D3: 10 minut 21:32 <@Gynvael> ;> 21:32 <@Gynvael> ok 21:32 <@Gynvael> wiec jade dalej ;> 21:32 -!- mode/#gynkurs [+m] by Gynvael 21:32 <@Gynvael> teraz krotki przeglad paru funkcji ze string.h 21:32 <@Gynvael> strcmp i strcpy juz byly 21:33 <@Gynvael> teraz: 21:33 <@Gynvael> strchr( tablica, 'znak' ) - szuka okreslonego znaku w tablicy i zwraca POINTER na ten znak 21:33 <@Gynvael> czyli 21:33 <@Gynvael> char *x; 21:33 <@Gynvael> x = strchr( "ala ma kota", 'm' ); 21:33 <@Gynvael> puts(x); 21:33 <@Gynvael> to wypisze "ma kota" 21:34 <@Gynvael> strrchr - to samo, tyle ze szuka nie od przodu, a od typu 21:34 <@Gynvael> na przyklad 21:34 <@Gynvael> char *x; 21:34 <@Gynvael> x = strrchr( "abcdcba", 'c' ); 21:34 <@Gynvael> puts(x); 21:34 <@Gynvael> to wypisze "cba" 21:34 <@Gynvael> natomaist strchr uzyte wypisalo by "cdcba" 21:35 <@adam__i> A da sei zeby np wysiwetlilo 3 napotkany tkai znak ? 21:35 <@Gynvael> adam__i: to juz trzeba zastosowac sztuczke 21:35 <@Gynvael> czyli 21:35 <@Gynvael> int i; char *x; 21:35 <@d13t3r^C0D3> Gynvael cos pokreciles 21:36 <@d13t3r^C0D3> /me strrchr - to samo, tyle ze szuka nie od przodu, a od typu 21:36 <@d13t3r^C0D3> na przyklad 21:36 <@d13t3r^C0D3> char *x; 21:36 <@d13t3r^C0D3> x = strrchr( "abcdcba", 'c' ); 21:36 <@d13t3r^C0D3> puts(x); 21:36 <@d13t3r^C0D3> to wypisze "cba" 21:36 <@d13t3r^C0D3> natomaist strchr uzyte wypisalo by "cdcba" 21:36 <@d13t3r^C0D3> strrchr ? a na dole strchr 21:36 <@Gynvael> d13t3r^C0D3: czego tak nie rozumiesz ?:p 21:36 <@d13t3r^C0D3> chyba cos nie tak ale zwracam honor jesli sie myle 21:37 <@Gynvael> d13t3r^C0D3: imho wszystko ok, przyklad dla strrchr, a na dole dodatek "co by sye stalo gdyby bylo tam strchr" 21:37 <@Gynvael> ;> 21:37 <@adam__i> d13t3r^C0D3 str od pczotku a strr od konca 21:37 <@Gynvael> char *x; 21:37 <@d13t3r^C0D3> aha 21:37 <@d13t3r^C0D3> oki lecimy dalej 21:37 <@Gynvael> x = strchr("aa b a c", 'a'); 21:37 <@Gynvael> x = strchr(x+1, 'a'); 21:37 <@Gynvael> x = strchr(x+1, 'a'); 21:37 <@Gynvael> adam__i: np taki kod ci znajdzie 3cie wystapienie 21:38 <@Gynvael> ok 21:38 <@Gynvael> dalej 21:38 <@Gynvael> strlen(napis) - podaje dlugosc tekstu (bez \0) 21:38 <@Gynvael> np 21:38 <@Gynvael> strlen("ala ma kota") zwroci 11 21:38 <@Gynvael> e 21:38 <@Gynvael> 10 21:38 <@Gynvael> ;p 21:38 <@Gynvael> e 11 21:38 <@Gynvael> no 21:38 <@Gynvael> dobrze licze ;p 21:38 <@d0b0c0p> 11 ;] 21:38 <@Gynvael> strlen to jest FUNKCJA 21:38 <@Gynvael> nie mylic z sizeof 21:38 <@Gynvael> przykladowy czesty blad to: 21:39 <@seraphin_> (a to nowosc :P funkja =^^=) 21:39 <@Gynvael> void moje_strcostam( char *a ) { int i; for( i = 0; i < sizeof(a).... 21:39 <@Gynvael> i niektorzy mysla ze sizeof(a) zwroci im wielkosc tablicy podanej do funkcji 21:39 <@d0b0c0p> a zwroci 4? 21:39 <@Gynvael> figa z makiem, dostana sizeof(a), czyli sizeof(char*), czyli 4 21:39 <@Gynvael> ;> 21:40 <@Gynvael> ok 21:40 <@Gynvael> dalej 21:40 <@Gynvael> strstr - analogiczne do strchr, tyle ze szuka pierwszego wystapienia napisu i zwraca pointer na jego poczatek 21:40 <@Gynvael> strcat - doklejanie napisow 21:40 <@Gynvael> przykladowo 21:41 <@Gynvael> char x[20] = "ala "; 21:41 <@Gynvael> strcat(x, "ma kota"); 21:41 <@Gynvael> to spowoduje ze w x[] bedzie "ala ma kota" 21:41 <@Gynvael> ale nalezy raczej uzywac "strncat" niz "strcat" 21:41 <@Gynvael> ofc polecam: man strncat 21:41 <@Gynvael> zeby sobei poczytac 21:41 <@Gynvael> w manie sa slicznie opisane 21:42 <@Gynvael> po za tym istnieje jeszcze w string.h sporo funkcji 21:42 <@d13t3r^C0D3> w windowsie nie ma mna :P 21:42 <@d0b0c0p> Gynvael: w jakim manualu? 21:42 <@d13t3r^C0D3> man* 21:42 <@seraphin_> ktory nr manuala 21:42 <@Gynvael> ale je pozostawiam jako prace domowa, poszperajcie na googlach 21:42 <@d13t3r^C0D3> sa tylko kursy z sieci 21:42 <@Gynvael> d0b0c0p: 3 21:42 <@d13t3r^C0D3> to to juz koniec? 21:42 <@Gynvael> seraphin_: 3 ;> 21:42 <@Gynvael> ok 21:42 <@Gynvael> to juz koniec 21:42 <@Gynvael> dam jeszcze linki 2 21:42 <@d0b0c0p> ;) 21:42 <@adam__i> Gynvael: jaka paca domowa ? 21:42 <@seraphin_> chu*j.... dajcie loga bo ja co do tych string.h mam za duzo pytan :D 21:43 -!- mode/#gynkurs [-m] by d0b0c0p 21:43 <@d0b0c0p> ;] 21:43 -!- You're now known as adam_i`aw 21:43 <@adam__i> Zaraz ebdze log 21:43 <@d13t3r^C0D3> wlasnie loga zrobcie poczytam sobie bo to ciekawe bylo 21:43 <@d13t3r^C0D3> oki 21:43 <@Gynvael> adam__i: w8 jeszcze 21:43 <@Gynvael> te linki dam 21:43 <@Gynvael> ;> 21:43 <@Gynvael> eh 21:43 <@adam_i`aw> nom 21:43 <@Gynvael> net mi chodzi tak ze--- 21:43 <@Gynvael> wrzuce je w topic ;> 21:43 <@Gynvael> dobra 21:43 <@Gynvael> teraz tak 21:43 <@Gynvael> nastepny wyklad w poniedzialek wieczorem dopiero 21:43 <@Gynvael> prawdopodobnie w poniedzialek wieczorem 21:44 <@d13t3r^C0D3> oki :] zarezerwuje czas 21:44 <@d0b0c0p> ok 21:44 <@Gynvael> http://gynvael.lunarii.org/temp/parsing.html <=- tam mozecie pare ilustracji zobaczyc, i strlen rozpisany 21:44 <@seraphin_> d13t3r^C0D3: pewnie i bylo ale ja mam full pytan bez loga :P 21:44 <@d13t3r^C0D3> a ja mam takie pytania 21:44 <@Gynvael> http://4programmers.net/article.php?id=470 <=- a tam jakas ciekawostke o "" dowiedziec sie 21:44 <@d13t3r^C0D3> tez napiszemy swoja strlen, strchr , strrchr ?? 21:44 <@Gynvael> ;> 21:44 <@Gynvael> ok 21:44 <@Gynvael> d13t3r^C0D3: hehehe 21:44 <@Gynvael> moze przy okazji 21:44 <@Gynvael> dobra 21:45 <@Gynvael> jako zadanie domowe 21:45 <@Gynvael> napisac wlasne: 21:45 <@Gynvael> strcmp, strlen, strrchr 21:45 <@Gynvael> te 3 ;> 21:45 <@Gynvael> a 21:45 <@Gynvael> i strcat 21:45 <@Gynvael> te 4;> 21:45 <@d13t3r^C0D3> strcmp bylo juz :P 21:45 <@Gynvael> hmm 21:45 <@Gynvael> to co 21:45 <@Gynvael> ;> 21:45 <@d0b0c0p> bye, bye ;) 21:45 -!- Gynvael changed the topic of #gynkurs to: ciag dalszy (#6) o 21:00 (5.09) temat: struktury i unie, archiwum kursow: http://salv4tion.ath.cx/~adam/gynkurs/ 21:46 <@Gynvael> papa 21:46 <@Gynvael> dziekuje za uwage 21:46 <@Gynvael> ;> 21:46 <@Gynvael> ok 21:46 <@d13t3r^C0D3> eeee ja mialem pytanko 21:46 <@Gynvael> mow mow 21:46 <@Gynvael> ;> 21:46 <@adam_i`aw> dziekujem za kurs 21:46 <@d13t3r^C0D3> jak zrobic argument np ze mam .tekst argumen1 argumen2 ??? 21:47 <@Gynvael> d13t3r^C0D3: hmm najlepiej zebys szukal sobie spacji w tym 21:47 <@d0b0c0p> bye, bye all ;] 21:47 -!- d0b0c0p [~user@aag2.internetdsl.tpnet.pl] has quit ["jutro do szkoly {joke ofc :P}"] 21:47 <@Gynvael> d13t3r^C0D3: ew poczytaj o strtok, ale to jest ZLA funkcja ;> 21:47 <@seraphin_> adam_i`aw: wrzuciles? 21:47 <@d13t3r^C0D3> aha oki 21:47 <@adam_i`aw> seraphin_: w8 21:48 <@adam_i`aw> net m istrznei wolnochodzi 21:48 <@d13t3r^C0D3> dobra ja tez chyba juz spadam bo jutro na 7.10 :/ jutro logi przeczytam a teraz bede czytal programowanie w c++ 21:48 <@seraphin_> ja piernicze ale wpadlem na ostatnie 20min 21:49 <@d13t3r^C0D3> no ja tez gdzies tak przed toba i w polowie jeszcze bylem 21:49 <@d13t3r^C0D3> daletego czekam na loga bo to mnie interesuje ;]