abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 00:33 | IT novinky

Josef Průša představil na Maker Faire v New Yorku svou novou 3D tiskárnu Original Prusa i3 MK3. Z novinek (YouTube) lze zdůraznit senzor filamentu, výměnnou magnetickou podložku, rychlejší tisk nebo rozpoznání uskočené vrstvy, výpadku napájení a výpadku filamentu (YouTube).

Ladislav Hagara | Komentářů: 2
včera 17:22 | Komunita

Martin Flöser představil na svém blogu projekt XFree KWin. Cílem projektu je rozběhnout správce oken KWin na Waylandu bez XWaylandu [reddit].

Ladislav Hagara | Komentářů: 5
včera 16:55 | Komunita

Do pátku 29. září probíhá v Praze v hotelu Hilton konference SUSECON 2017 pořádaná společností SUSE. Dění na konferenci lze sledovat na Twitteru. Nils Brauckmann, CEO společnosti SUSE, vítá účastníky konference na YouTube.

Ladislav Hagara | Komentářů: 2
včera 07:00 | Komunita

Příspěvek na blogu společnosti Yubico informuje o začlenění podpory bezpečnostních klíčů FIDO U2F do Firefoxu Nightly. Dosud bylo možné dvoufázové ověření pomocí FIDO U2F ve Firefoxu zajistit pouze pomocí doplňku.

Ladislav Hagara | Komentářů: 3
včera 06:00 | Humor

Adobe PSIRT (Adobe Product Security Incident Response Team) neúmyslně zveřejnil (archive) na svém blogu svůj soukromý OpenPGP klíč. Klíč byl revokován a vygenerován nový. Nelze nezmínit xkcd 1553 - Veřejný klíč.

Ladislav Hagara | Komentářů: 1
24.9. 20:00 | Nová verze

Byla vydána (cgit) verze 0.99 svobodného nelineárního video editoru Pitivi. Jedná se o release candidate verze 1.0. Přehled úkolů, které je nutno ještě dodělat, na Phabricatoru. Pitivi je k dispozici také ve formátu Flatpak.

Ladislav Hagara | Komentářů: 0
24.9. 17:11 | Komunita

Microsoft s Canonicalem představili linuxové jádro Ubuntu optimalizováno pro cloudové služby Microsoft Azure (linux-azure). Jako výchozí je toto menší a výkonnější jádro použito již v Ubuntu Cloud Images for Ubuntu 16.04 LTS. Canonical zatím nenabízí patchování tohoto jádra za běhu systému (Canonical Livepatch Service).

Ladislav Hagara | Komentářů: 1
24.9. 14:55 | Komunita

Facebook oznámil, že přelicencuje open source projekty React, Jest, Flow a Immutable.js ze své vlastní kontroverzní licence BSD+Patents na licenci MIT. Stane se tak tento týden s vydáním Reactu 16. Jedním z důvodů přelicencování bylo oznámení nadace Apache, že software pod Facebook BSD+Patents licencí nesmí být součástí produktů pod touto nadací [Hacker News].

Ladislav Hagara | Komentářů: 0
23.9. 21:44 | Nová verze

Po půl roce od vydání verze 9.0 byla vydána verze 10.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 1
22.9. 18:11 | Nová verze

Společnost Oracle oficiálně oznámila vydání Java SE 9 (JDK 9), Java Platform Enterprise Edition 8 (Java EE 8) a Java EE 8 Software Development Kit (SDK). Java SE 9 přináší více než 150 nových vlastností.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (5%)
 (3%)
 (17%)
 (75%)
Celkem 578 hlasů
 Komentářů: 23, poslední 24.9. 18:12
    Rozcestník

    Dotaz: adresy v Cecku

    28.11.2006 14:22 pierre
    adresy v Cecku
    Přečteno: 166×
    Ahoj. Neviete mi niekto poradit, ako by som retazec o 100 znakov mohol citat ale s pripocitanim adresy? Nechcem to riesit takto : retazec[i]

    Odpovědi

    28.11.2006 14:27 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Nějak vám nerozumím. Myslíte 'retazec+i'?
    28.11.2006 14:41 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    myslim to tak ze k adrese retazca pripocitam hexadecimalnu hodnotu, aby som sa dostal v stacku na druhy znak v retazci a potom na treti atd...
    28.11.2006 14:48 petr
    Rozbalit Rozbalit vše Re: adresy v Cecku
    char *c;
    char *new_ptr;
    
    {
        ...
    
        for (int i = 0; i < n; i++) {
            ...
            // sizeof(char) není nutný, protože
            // překladač správně zjistí,
            // že používáme char
            new_ptr = c + (sizeof(char) * i);
            ...
        }
    
        ...
    }
    
    28.11.2006 14:50 petr
    Rozbalit Rozbalit vše Re: adresy v Cecku
    jen doufám, že jsem to nepodělal, protože v C již neprogramuji (tedy – když nemusím – a donutit se nenechám)
    28.11.2006 15:25 finn | skóre: 42 | blog: finnlandia | 49° 44´/13° 22´
    Rozbalit Rozbalit vše Re: adresy v Cecku
    No, sizeof(char) je _vždy_ rovno jedné.
    Užívej dne – možná je tvůj poslední.
    28.11.2006 16:14 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: adresy v Cecku
    >> jen doufám, že jsem to nepodělal

    Podělal.

    >No, sizeof(char) je _vždy_ rovno jedné.

    To je síce pravda. Ale keď mám pole štruktúr, kde tá štruktúra má 40 bajtov. Tak sa po tom poli neposúvam
    MY_STRUCT *p; ...
    p=p+sizeof(MY_STRUCT);
    ale
    p=p+1;
    O tom je pointrová matematika.
    29.11.2006 11:52 petr
    Rozbalit Rozbalit vše Re: adresy v Cecku
    To je síce pravda. Ale keď mám pole štruktúr...
    Snad pole pinterů na struktury, ne?

    Pak je to p = p + sizeof(MY_STRUCT *)
    29.11.2006 12:02 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Tak to uz vubec ne. Pointerova matematika hovori jasne: kdyz prictes k pointeru jednicku, zmeni se jeho adresa presne o velikost typu, na ktery ukazuje.
    29.11.2006 13:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    nie presne :-) Existuje niečo také ako "zarovnanie"
    zmení sa tak, že bude ukazovať na nasledujúci prvok

    inak povedané, ptr[index] je ekvivalentné s *(ptr + index), *(index + ptr) i index[ptr] ... odovzdať zadanie s tým posledným zápisom by tiež mohlo byť zábavné :-))

    Josef Kufner avatar 29.11.2006 17:12 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: adresy v Cecku
    ... a proto není možné počítat s pointerem na void. Na to jsem si taky jednou naběh :-D
    Hello world ! Segmentation fault (core dumped)
    29.11.2006 17:30 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    lol
    30.11.2006 00:33 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: adresy v Cecku
    No tak jednoduše: přetypovat na int, udělat výpočet, přetypovat zpátky a pak se zamyslet, proč to do...... dělám tak blbě ...
    Quando omni flunkus moritati
    Josef Kufner avatar 30.11.2006 08:36 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Mno, ono je lepší to přetypovat na typ na který ten pointer doopravdy ukazuje a s žádnýma podivnýma výpočtama se neobtěžovat ;-)
    Hello world ! Segmentation fault (core dumped)
    clayman avatar 29.11.2006 12:11 clayman | skóre: 13 | Praha 6
    Rozbalit Rozbalit vše Re: adresy v Cecku
    sizeof(MY_STRUCT*) ti vrati velikost adresy, ne ty struktury, co je na ni ulozena.
    29.11.2006 17:28 petr
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Ale o to mi přeci jde, protože je to pole pointerů na strukturu nikoli pole struktur, kde leží jedna struktura tak jak je za druhou. Takže, když se (v prvním případě) posunu o sizeof(MY_STRUCT *), tak se dostanu na pointer následující struktury, což je to, co chci... Nebo mi něco uniklo?

    Omlouvám se, ale v C jsem psal naposledy před pěti lety a tohle je to, co mi v hlavě zbylo...

    Děkuji za pochopení.
    29.11.2006 17:36 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Ty nemas pole pointeru na struktury, ty mas pole struktur. Nekde si o tom znova precti. Ve zkratce: identifikator pole je v podstate ukazatel na prvni prvek toho pole, muze se tedy vyskytovat vsude tam, kde ukazatel (vyjma leve strany prirazeni). Dale operator indexovani pole [] funguje jako operator + pro ukazatele a cele cislo. Plati toto:
    int arr[10];
    
    *(arr + 10) == arr[10];
    O tomhle je ta pointerova aritmetika.
    29.11.2006 21:21 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: adresy v Cecku
    V takovémhle případě dokonce ve slušném OS platí arr[10] == arr[11] == … == Segmentation fault, core dumped :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Josef Kufner avatar 29.11.2006 23:33 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: adresy v Cecku
    S tím bych si dovolil nesouhlasit. Segmentation fault (bohužel) bude až pointer odleze z adresového prostoru toho procesu, takže arr[10] nejspíš trefí nějaká data, která si tam odložil malloc, sousední proměnnou nebo něco podobného. Každopádně to na zmíněnou rovnost *(arr + 10) == arr[10] nemá vliv ;-)
    Hello world ! Segmentation fault (core dumped)
    30.11.2006 12:04 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Já bych doopravdy čekal, že segmentation fault nastane při pokusu o přístup do paměti, která není tomu procesu přidělená. Vím, že alokátor glibc si nechává přidělovat nějaké souvislé větší bloky, ale když jsem to vyzkoušel, nevěřil jsem svým očím -- nejenže arr[10] je v pohodě, dokonce i arr[2557] je v pohodě (žádné jiné proměnné nebyly). Segmentation fault až u arr[2558]. To číslo asi nemá žádný velký význam, ale jsou snad ty bloky velikosti 10 kB? Technice se dneska prostě nedá věřit :-) (Nekamenujte mne, prosím, za pravděpodobnou neznalost elementárních skutečností, nejsem céčkař – naštěstí :-) ).
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    30.11.2006 12:24 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Velikost 10 KB mi nepřipadá nijak nesmyslně velká, alokace paměťového bloku od jádra je relativně náročná operace. Navíc si musíte uvědomit, že jednotlivé alokované bloky na sebe mohou navazovat, takže se můžete trefit i do sousedního.
    30.11.2006 11:13 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: adresy v Cecku
    V takovémhle případě dokonce ve slušném OS platí arr[10] == arr[11] == … == Segmentation fault, core dumped :-)
    S OS to bohužel moc nesouvisí, protože malloc při normálním provozu nealokuje paměť od OS. Paměť se alokuje po větších blocích a tam si pak dělá libc vlastní správu.

    Alokování paměti přímo od OS společně s "ochrannými bloky" pro coredump zajišťuje například electricfence (či nekterý z přehršle pokročilejších nástroju). MSVC má také takovou feature. Samozřejmě mezi základní pravidla psaní v C patří (vedle např. "netolerovat warningy"), že při vývoji se vždy linkuje s efence. V provozu se samozřejmě nic takového pouhžít nedá, to zpomalení je o několik řádů.
    28.11.2006 14:53 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Vidim ze ma nikto nepochopil, tak ze, zadanie je asi taketo v cykle (je jedno akom) mam pouzivat iba jednu premenu, ktoru mozem nazvat ako chcem. A k hodnotam retazca sa musi pristupovat pomocou adries. Tak ze ziadne "+i" si nemozem dovolit.
    28.11.2006 15:01 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
      for (p = ...; *p; p++) {
        ...
      }
    

    P.S.: Pokud vás nikdo nepochopil, zkuste se zamyslet nad tím, zda není problém ve vašich formulacích.

    28.11.2006 15:01 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: adresy v Cecku
    No a co ++retezec?

    K čemu jsou tyhle školní úlohy? že by se z toho někdo naučil programovat, o tom dost pochybuju…
    28.11.2006 15:03 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku

    #include <stdio.h>
    
    int main()
    {
            char *str = "Nejaky retezec", *tmp = str;
    
            while (*tmp)
                    printf("%c", *tmp++);
    
            exit(0);
    }
    

    Tohle ti vypise cely retezec. Nebo je i tohle neco jineho nez jsi chtel?

    Jakub Hájek avatar 28.11.2006 15:06 Jakub Hájek | skóre: 14 | blog: zamek | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Myslis neco takoveho?
    char * buf = "Good niht white pride!"
    
    while(* buf != 0)
    {
      printf("znak na adrese %d je %c\n",buf,*buf);
      ++buf;
    }
    
    
    Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
    28.11.2006 15:31 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    myslim nieco taketo void posun(int cislo){ (*(&cislo - 1)) = (*(&cislo - 1)) + 0x10; } len neveim ako to mam spravit pre ten retazec.
    28.11.2006 15:37 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Zkuste se soustředit a konečně srozumitelně napsat, co vlastně chcete. Nevím jak ostatní, ale mne už to hádání nebaví.
    28.11.2006 15:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: adresy v Cecku
    A tohle vás někde učí, nebo jste tuhle prasárnu vymyslel sám?
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    28.11.2006 15:45 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Nejvíc mne ovšem děsí, že gcc proti tomu zběsilému nápadu aplikovat operátor & na parametr předávaný hodnotou nemá námitek.
    28.11.2006 15:47 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Tak to jsme přinejmenším dva :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    28.11.2006 16:09 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Prečo? Prameter odovzdávaný hodnotou sa uloží na stack. To pamäťové miesto na stacku má svoju adresu. A to je to čo vráti &. Či už s tou adresou robíš rozumné veci, alebo nie, je druhá vec.
    28.11.2006 16:21 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Prečo? Prameter odovzdávaný hodnotou sa uloží na stack.

    Možná. A nebo také ne…

    28.11.2006 23:00 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Pokud beru adresu, tak se prekladac musi postarat o to, ze to na ni najdu. V tomhle bych problm nevidel.
    Josef Kufner avatar 28.11.2006 23:26 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Pokud ovšem předá parametr v registru procesoru, tak žádnou adresu opravdu nemá.
    Hello world ! Segmentation fault (core dumped)
    Vašek Lorenc avatar 28.11.2006 23:59 Vašek Lorenc | skóre: 27
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Překladač si obvykle udržuje přehled o tom, co se s danou proměnnou dělá, toho bych se nebál.. Jinak by nemohl dělat některé optimalizace.
    ...včetně majestátného loosa
    29.11.2006 03:53 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    to ale dokáže len v prípade, ak k tej premennej pristupujete. Ak len predpokladáte, že prekladač niečo nejak urobí, vzniká problém (ako v tomto prípade).
    29.11.2006 00:01 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Z cehoz vyplyva, ze pokud se na adresu ptam, tak tu hodnotu do registru ukladat nemuze. Respektive musi to zaonacit tak, aby ukazatel ukazoval tam, kam ukazovat ma.
    28.11.2006 23:15 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Docela by me zajimalo, co podle vas tato funkce dela a pokud jste ji zkusil nekde pouzit, jak jste dopadl.
    28.11.2006 15:47 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    tk ze chcu po mne asi toto : Program musí obsahovať samostatnú knižnicu s funkciou, ktorá vykoná úlohu a) z prvého zadania, pričom táto funkcia nebude pristupovať k argumentom a lokálnym premenným pomocou ich mien - až na jednu, ktorú si môžete zvoliť - ale len prostredníctvom ich adries na zásobníku (stacku). Potrebné údaje o ich umiestnení zistíte pomocou debuggovacieho nástroja 'gdb'. Funkcia musí vracať dĺžku spracovaného reťazca, pričom nesmie byť použitý príkaz 'return'. Na načítavanie reťazca, prípadne ďalších potrebných údajov môžete použiť štandardné knižničné funkcie.
    28.11.2006 15:53 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Co je to za nesmysl? Specifikace jazyka C o žádném zásobníku nemluví, dokonce, jak jsem právě zjistil, se v ní výraz stack vůbec nevyskytuje. To je pouze interní záležitost konkrétních implementací jazyka, takovými věcmi byste se v programu vůbec neměl zabývat.
    28.11.2006 15:59 sulo
    Rozbalit Rozbalit vše Re: adresy v Cecku
    ja by som ti odporucil pouzit iny jazyk alebo radsej nechat to naprogramovat niekomu inemu.
    *** glibc detected *** free(): invalid next size (fast): 0x0804b6b0 *** 652 Aborted (core dumped)
    28.11.2006 15:59 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Myslím, že chápu, o co vám jde, jenže nehodlám podobné techniky podporovat. Psaní nepřenositelných programů považuji za vymýceníhodný nešvar obecně a ohledně psaní programů, jejichž funkčnost by mohlo ovlivnit už pouhé zapnutí optimalizace, za to by měly být tělesné tresty.
    28.11.2006 16:30 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    To bolo o písaní. A čo by malo byť pre zadávateľov? :-)
    riešenie (a vcelku prenositeľné) aj pre blbé školské zadanie, nájde pýtajúci sa v man va_start
    28.11.2006 16:44 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Totéž, jen tresty přísnější. Protože psát prasárny je sice hrozné, ale učit prasárny je daleko horší.
    28.11.2006 16:56 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    lol ... a to som si až teraz všimol to zadanie "nesmie byť použitý return". Chudák chlapec, takého blba chytiť v škole, pokazený celý život :-))
    Jardík avatar 28.11.2006 17:10 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Uznávám, zadání dementní. Ale hodnotu přece bez return vrátit můžu, asi takto:
    void func(int& bla)
    {
      bla = 20; //vrátil jsem hodnotu
    }
    
    Věřím v jednoho Boha.
    28.11.2006 17:17 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    V C++. V C by se to muselo řešit přes pointer.
    Jardík avatar 28.11.2006 18:08 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Aha. Já myslel, že i C umí reference. Tak tedy pointerem.
    Věřím v jednoho Boha.
    28.11.2006 18:33 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Ne, to je výmysl C++, zmiňuje se o tom i Stroustrup ve svém slavném rozhovoru (je to skoro na konci). :-)
    28.11.2006 17:18 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    On to chtel v C, ktere reference neumi...
    Josef Kufner avatar 28.11.2006 17:45 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: adresy v Cecku
    void func(int *bla)
    {
      *bla = 20;
    }
     
    /* pouziti: */
    int n;
    func(&n);
    Hello world ! Segmentation fault (core dumped)
    29.11.2006 13:53 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: adresy v Cecku
    To je napřesdržku, nedej bože abych nějakého jeho študáka potkal jako kolegu. To není strestné?
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    29.11.2006 16:55 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: adresy v Cecku
    To je napřesdržku, nedej bože abych nějakého jeho študáka potkal jako kolegu. To není strestné?
    Pokud se jedná o střední školu (a nižší ročník než čtvrťák), tak by se to dalo kvalifikovat jako "ohrožování mravní výchovy mládeže".
    28.11.2006 16:01 Zdenek
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Proc se clovek cpe nekam na co evidentne nema? Nick menite jak se vam zachce a ani otazku neumite preformulovat, tak aby to vypadalo, ze chcete pomoct a ne vyresit zadany ukol. Fuj.
    28.11.2006 16:19 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Uverejni meno toho magora čo takéto veci chce, nech má poriadnu hambu. Keď chce učiť pointre a C, tak nech vymyslí zmysluplné zadanie. A keď chce učiť, ako sa odovzdávajú parametre cez stack (a ako sa vracia návratová hodnota v registri), tak nech to nazve pravým menom: assembler.
    28.11.2006 17:00 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    ak je toto celé zadanie, si v pohode, nič nespomína o globálnych premenných ani o makrách :-)
    
    va_list list;
    char * ptr;
    
    void fun (int * retval, ...) {
      va_start (list, retval);
    
      ptr = va_arg (list, char *);
      for (*retval = 0; *ptr; (*retval)++, ptr++)
        ;
    }
    
    PS: kompilovať ani inak kontrolovať sa mi to nechcelo, idea je snáď jasná :-)
    Jardík avatar 28.11.2006 17:15 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: adresy v Cecku
    1. Chybí ti tam va_end :)
    2. Co když nezadá další parametr?
    Věřím v jednoho Boha.
    28.11.2006 17:35 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    ad 1, ad 2 ... to už je na pýtajúcom sa, ja som len naznačil cestu :-D
    28.11.2006 16:01 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    to nejde, dnes to musim mat este som nasiel taketo nieco, ale sa s toho neviem vymotat
    for((*(&retazec-3))=0;(int)(*(&retazec-3))<(int)(*(&retazec-4));(*(&retazec-3))++)
    
            {
    
            (((char*)(*(&retazec)))[(int)(*(&retazec-3))])=(((char*)(*(&retazec)))[(int)(*(&retazec-3))])^0x39;
    
            fprintf(stdout,"%c",(((char*)(*(&retazec)))[(int)(*(&retazec-3))]));
    
            }
    
             asm(""::"eax" (*(&retazec-4)))
    
    28.11.2006 16:03 Zdenek
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Aaaaa. To je konstrukce, jdete velmi spravnym smerem ;-)
    28.11.2006 16:06 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: adresy v Cecku

    Víte, k čemu slouží domácí úkoly? K tomu, abyste si na nich ověřil, zda látce rozumíte, a pokud ne, abyste to napravil. Tím, že si úkol necháte napsat od někoho jiného, ztrácí úkol svůj smysl.

    Jinak je ten váš kód moc hezký, začíná mi to (opticky) trochu připomínat LISP… :-)

    28.11.2006 16:27 petr
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Dopr...e a tohle je co??? Omlouvám se, že jsem sprostý, ale připomíná mi to spíš Havlovu básničku nebo obfusknutej JavaScript s optimalizací na co největší velikost, ale program v jazyce C opravdu ne!

    Víte, když se tak na to dívám, tak přesně takovou prasárnu jsem opravoval v Midnight Commanderu. Můžete mi vysvětlit, jakou má přidanou hodnotu fprintf(stdout, "%c", ...)??? Proč nepoužijete putc()??? Umíte si vůbec představit, jakej overhead mají *printf() funkce? V tom MC to bylo v místě, kde se generoval příkaz pro subshell a bylo tam přesně to samý... Tam to navíc převádělo do oktalový soustavy... Pár bitovejch posunů místo printf() a najednou byl midnight použitelnej!

    Takhle bych vyučoval programování na konzervatoři, protože bych měl jistotu, že žádný ze studentů se tím nikdy bavit nebude.
    28.11.2006 17:05 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: adresy v Cecku
    btw, existuje niečo ak define
    #define A ( (int)(*(&retazec-3)) )
    #define B ( (int)(*(&retazec-4)) )
    
    28.11.2006 16:12 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    ja nechcem aby mi ju niekto pisal, otazka bola polozena na zaciatku. chcem len trocha pomoct, lebo na nete nic nieje.
    28.11.2006 16:17 retkarach
    Rozbalit Rozbalit vše Re: adresy v Cecku
    myslim, ze asi najviac ti pomoze nejaka pekna a obsiahla ucebnica jazyka C ;)
    maybe you can DO IT !!!
    28.11.2006 16:18 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Na puvodni otazku ti odpovedelo X lidi: pouzit konstrukci typu *str++. Vis vubec neco u ukazatelich?
    28.11.2006 16:19 sulo
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Pocuj a to robis nejaku sutaz. Alebo preco prave takymto sposobom to potrebujes riesit? Su aj krajsie konstrukcie.
    *** glibc detected *** free(): invalid next size (fast): 0x0804b6b0 *** 652 Aborted (core dumped)
    Jardík avatar 28.11.2006 17:25 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Se s tím ne*er:
    strlen:
      push ecx
      xor ecx,ecx
      xor eax,eax
      dec ecx
      cld
      repne scansb
      neg ecx
      mov eax,ecx
      pop ecx
      ret
    
    Do ES:EDI hoď adresu řetězce, výsledek dostaneš v ecx. V céčku to zabal do asm{}(nebo jak se tam vkládá kód assembleru) + navíc tam bude řádek, kde ukládáš tu adresu do es:edi, ale jelikož jsem v C nikdy s vkládaným assemblerem nedělal (podle mně je to čuňárna), tak nevím jak.
    Věřím v jednoho Boha.
    Jardík avatar 28.11.2006 17:34 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Jinak zadanou úlohu nelze jinak než va_listem řešit, protože i když napíšeš:
    void neco(const char *retezec, unsigned long long int& vysledek)
    {
      vysledek = 0;
      while(*retezec++) ++vysledek;
    }
    
    Tak to zadání nesplňuje - retezec je totiz nazev promenne typu char* (ukazatel na první znak v poli x znaků). Pokud bys použil *(&retezec), zase jsi přistoupil k proměnné pomocí jména. Ukazatel na proměnnou totiž bez jména proměnné nezjistíš. Když předáš funkci rovnou ukazatel, přistoupíš k ukazatelu jménem. Úloha je neřešitelná. A navíc, kde je napsáno, že v C na všech platformách jsou předávány argumenty funkcím na stacku? Většinou tomu tak je, ale nemusí.
    Věřím v jednoho Boha.
    29.11.2006 09:32 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: adresy v Cecku
    A navíc, kde je napsáno, že v C na všech platformách jsou předávány argumenty funkcím na stacku? Většinou tomu tak je, ale nemusí.
    Některé platformy ani zásobník nemají.
    29.11.2006 15:34 akbar
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Uz som to spravil, ma to byt takto
    
    int uloha_a(char *str){
    int pocet = 0, i = -1;                                                         /*pocet -> (&i - 1), str -> (&str + 4)*/
    
        while (((char *) * (&i + 4))[i++] != NULL){                                /*prehladavanie retazca po znaku, s podmienkou skoncenia*/
            if (((char *) * (&i + 4))[i] >= '0' && ((char *) * (&i + 4))[i] <= '9')/*porovnavanie znaku z cislicou*/
                (*(&i - 1))++;                                                     /*ak je znak cislica, pocet sa inkrementuje o 1*/
            }
        }
        asm("" :: "eax" ((*(&i - 1)) - 1));                                        /*vratenie poctu cislic v retazci, cez 32 bit zasobnik eax */
    }
    
    Pomocou gdb som si zistil o kolko sa nachdza adresa dvoch dalsich premennych, a zapisal to.
    29.11.2006 15:36 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: adresy v Cecku
    1. K cemu je takovahle !@#$%^ ?
    2. Na ktery !@#$%^ skole se tohle uci?
    29.11.2006 15:42 hm
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Fakt geniální... jen pytlík na zvracení jste zapomněl přiložit...
    29.11.2006 16:11 RD
    Rozbalit Rozbalit vše Re: adresy v Cecku
    náhodou chválím, tohle je přesně podle desatera úspěšného programátora, pokud takhle napíšete strategicky důležitou aplikaci, budete mít jistotu trvalého zaměstnání ;o)

    http://sorry.vse.cz/~xkecm01/readtext.php?txt=hippokrates.htm&kat=dF92ZWRhLmluYw==
    29.11.2006 16:42 Mti. | skóre: 31 | blog: Mti
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Nepochvalim. C neumim. (jen pouzivam). Ale eax urcite neni zasobnik ale "pouhy" registr. :-( (co ja bych za to dal mit v ATmega32 neco tak velikeho jako EAX :-) , nejlepe na matematiku...)
    Vidim harddisk mrzuty, jehoz hlava plotny se dotyka...
    30.11.2006 09:37 secido | skóre: 27
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Je to humus, tu sú krajšie veci
    30.11.2006 13:37 wintermute
    Rozbalit Rozbalit vše Re: adresy v Cecku
    Zadanie malo nadpis "Ako zhovadit pocitanie cislic v retazci v jazyku C tak aby funkcia nebola prenositelna na inu platformu ako x86"? Lebo mam dojem, ze takmer na nicom inom Vam to uz fungovat nebude. Ani na x86_64 (AMD64) v 64bitovom rezime. Priam ucebnicovy priklad toho ako sa programovat nema. Za nieco take by malo byt povolene strielat bez toho aby to bolo klasifikovane ako vrazda.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.