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í
×
    včera 13:33 | Nová verze

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.6. Přehled novinek s náhledy v oznámení na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | IT novinky

    V Edici CZ.NIC, knižní řady správce české národní domény, vychází nová kniha Martina Malého Kódy, buildy, firmwary. Autor po půl roce od vydání předchozího titulu přichází se svou již sedmou knihou, tentokrát zaměřenou na vývoj programového vybavení pro embedded zařízení. Publikace s podtitulem Základy vývojářského řemesla pro tvůrce hobby elektroniky nabízí praktického průvodce pro všechny, kdo své projekty vytvořené s Arduinem

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 11:44 | Komunita

    V Brně na FIT VUT probíhá dvoudenní open source komunitní konference DevConf.CZ 2026. Na programu je celá řada zajímavých přednášek, lightning talků, meetupů a workshopů. Přednášky lze sledovat i online na YouTube kanálu konference. Aktuální dění lze sledovat na Matrixu, 𝕏 nebo Mastodonu.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 15.1 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    17.6. 19:11 | Zajímavý projekt

    Vývojáři Ubuntu představili projekt Myna, tj. iniciativu zaměřenou na přidání funkce převodu řeči na text do prostředí desktopu Ubuntu. Dle plánu již v Ubuntu 26.10.

    Ladislav Hagara | Komentářů: 2
    17.6. 18:33 | Zajímavý software

    Společnost Epic Games představila nový open source systém pro správu verzí Lore navržený pro "bezprecedentní škálovatelnost dat i týmů a optimalizovaný pro projekty, včetně her a zábavy, které kombinují kód s velkými binárními soubory, aby uspokojil potřeby vývojářů i umělců". Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 0
    17.6. 15:33 | IT novinky

    Úřad pro ochranu hospodářské soutěže (ÚOHS) provedl v říjnu 2024 místní šetření u společnosti Seznam.cz. Úřad prověřoval důvodné podezření na možné protisoutěžní jednání, konkrétně zneužití dominantního postavení. Krajský soud v Brně v květnu 2025 konstatoval, že toto šetření bylo nezákonné. Nejvyšší správní soud (NSS) včera rozhodl, že šetření bylo provedeno v souladu se zákonem. Krajský soud bude muset případ posoudit znovu.

    Ladislav Hagara | Komentářů: 0
    17.6. 12:22 | IT novinky

    Byl představen skládací telefon Commodore Callback 8020. Ani hloupý, ani chytrý. Pro fanoušky Commodore a digitálního minimalismu. Bez webového prohlížeče a sociálních sítí. S předinstalovaným WhatsAppem. S operačním systémem Sailfish OS.

    Ladislav Hagara | Komentářů: 5
    17.6. 08:22 | Bezpečnostní upozornění

    V OpenBSD byla objevena 27 let stará chyba v ppp pomocí níž lze vzdáleně obejít autentifikaci. Chyba byla nahlášena 12.6. a 14.6. byla opravena. Bližší info v článku A 27-Year-Old Authentication Bypass in OpenBSD's PPP Stack.

    Max | Komentářů: 6
    17.6. 05:22 | Zajímavý článek

    Odpověď Evropské komise (pdf) k evropské občanské iniciativě Stop Destroying Videogames, jež je součástí hnutí Stop Killing Games: "Komise se domnívá, že v této fázi nemůže navrhnout právní povinnost zachovat hratelnost videoher poté, co přestaly být poskytovány komerčně. Důvodem jsou i stávající práva duševního vlastnictví. Podle autorského práva EU mají nositelé práv výlučná práva ke svým výtvorům. Kromě autorských práv mohou být

    … více »
    Ladislav Hagara | Komentářů: 20
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (16%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1934 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník
    Štítky: není přiřazen žádný štítek


    Dotaz: argument list

    23.7.2011 19:55 Petr
    argument list
    Přečteno: 342×
    #include curses.h

    void eas_debug(int debug_level, char *str1, ...) { va_list args; va_start(args, str1); printf(str1, args); }

    int main() { eas_debug(1, "Hello, world! %d\n", 2); }

    Tento program mi na konzoli vypíše: "Hello, world! -1076085368". namísto "Hello, world! 2". Co dělám špatně ? Díky za postřehy, Petr

    Řešení dotazu:


    Odpovědi

    23.7.2011 21:35 mato
    Rozbalit Rozbalit vše Re: argument list
    Hm, toto ma celkom zaujalo. Nikdy som s varargs nerobil, i ked mi je to zname. Podla man page to ale skor vyzera, ze ty tak argumenty nemozes dat. Ak som to spravne pochopil, tak k ... pristupujes cez va_* macra. Tj:
    
    #include <stdio.h>
    #include <stdarg.h>
    
    void eas_debug(int debug_level, char *str1, ...) {
            va_list args;
            va_start(args, str1);
    
            while (*str1) {
                    switch (*str1++) {
                    case 'd' : {
                                    int a = va_arg(args, int);
                                    printf ("eas_debug%d: got int: %d\n", debug_level, a);
                                    break;
                            }
                    }
            }
    
            va_end(args);
    }
    
    int main() {
            eas_debug(1, "%d", 2);
            return 0;
    }
    
    
    a vystup:
    
    $ cc -Wall -o atest test.c
    $
    
    $ ./atest
    eas_debug1: got int: 2
    $
    
    
    
    24.7.2011 00:15 Petr
    Rozbalit Rozbalit vše Re: argument list
    jj to bych celkem chápal, ale já potřebuju funkci které můžu předhodit v tom variable listu různé typy argumentů, prostě aby se to chovalo stejně jako standartní printf.

    Např. eas_debug(1, "24test: %d%s", 2, "4") a potom třeba eas_debug(1, "24test: %s%d", "2", 4). Tim přístupem přes va_arg() z toho bude pěkná brutalita, jestli to vůbec jde?
    24.7.2011 00:36 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: argument list

    S obyčejným printf() tohle (předání všech parametrů najednou) neuděláte, ale právě proto existuje vprintf() a příbuzné funkce:

    void debug(unsigned l, const char* fmt, ...)
    {
      va_list v;
      if (l > debug_level) return;
      va_start(v, fmt);
      vfprintf(stderr, fmt, v);
      va_end(v);
    }
    

    Jinak samozřejmě můžete udělat i to, co navrhoval mato, a napsat si svou vlastní funkci, která bude parsovat format string a zpracovávat podle něj jednotlivé parametry. Pokud ale potřebujete jen nadstavbu nad standardní printf(), zbytečně byste tím jen duplikoval už hotovou práci.

    24.7.2011 00:46 mato
    Rozbalit Rozbalit vše Re: argument list
    pekne, na *printf family som nepomyslel .. takto to funguje ukazkovo.
    24.7.2011 11:16 Petr
    Rozbalit Rozbalit vše Re: argument list
    To je přesně ono, díky ..
    24.7.2011 00:40 mato
    Rozbalit Rozbalit vše Re: argument list
    kedysi davnejsie som sa dival na zdrojove kody printf, namatkovo som teraz grepol zdrojaky z FreeBSD, v sys/boot/arm/at91/libat91/printf.c je (pastujem iba pre tvoju otazku dolezite veci):
    void printf(const char *fmt,...) {
            va_list ap;
            va_start(ap, fmt);
            while ((c = *fmt++)) {
                            c = *fmt++;
                            switch (c) {
                            case 'c':
                                    xputchar(va_arg(ap, int));
                                    continue;
                            case 's':
                                    for (s = va_arg(ap, char *); *s; s++)
                                            xputchar(*s);
                                    continue;
    
    
    odkial ten printf pochadza je uplne jedno. osobne by som povedal, ze sa to ale teda nada spravit tak, ako si to mal na mysli.

    mozno ma ale niekto opravi..
    12.9.2011 23:48 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: argument list
    #define debug(...)                                                      \
            do {                                                            \
                    fprintf(stderr, "%s:%s():%d:",                          \
                            __FILE__, __func__, __LINE__);                  \
                    fprintf(stderr, __VA_ARGS__);                           \
                    fprintf(stderr, "\n");                                  \
            } while(0)
    
    nebo pres funkci
    void log_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
    
    Save the whales. Feed the hungry. Free the mallocs
    13.9.2011 00:22 zulu
    Rozbalit Rozbalit vše Re: argument list
    Předchozí odpovědi a varování o stáří diskuze jsi přehlédl, nebo jen ignoroval?
    13.9.2011 11:25 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: argument list
    nevidel jsem reseni, tak jsem poslal
    Save the whales. Feed the hungry. Free the mallocs
    13.9.2011 15:08 Sten
    Rozbalit Rozbalit vše Re: argument list
    Problém je v tom, že printf předáváte ukazatel na ty argumenty místo samotných argumentů. Pro použití s va_list je vprintf ;-)

    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.