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 23:22 | Pozvánky

    Chybí vám někdo, s kým byste si popovídali o bastlení, technice, počítačích a vědě? Nechcete riskovat debatu o sportu u piva v hospodě? Pak doražte na virtuální pokec u virtuálního piva v rámci Virtuální Bastlírny organizované strahovským MacGyverem již tento čtvrtek. Možná se ptáte, co se tak může probírat? Dají se probrat slavná výročí - kromě 55 let obvodu 555 (což je mimochodem prý andělské číslo) a vzpomínky na firmu Signetics -

    … více »
    bkralik | Komentářů: 0
    včera 23:11 | Zajímavý software

    GTK2-NG je komunitní fork GTK 2.24 (aktuální verze je 4.22). Oznámení a diskuse v diskusním fóru Devuanu, forku Debianu bez systemd. Není to jediný fork GTK 2. Ardour je například postaven na vlastním forku GTK 2 s názvem YTK.

    Ladislav Hagara | Komentářů: 0
    včera 17:33 | Pozvánky

    V neděli 17. května 2026 proběhne v Českých Budějovicích první MobileLinux Hackday zaměřený na Linux v mobilech, embedded platformy a open source hardware. Po sedmi úspěšných měsíčních setkáních v Praze se akce přesouvá také do jižních Čech, aby se komunita mobilního Linuxu mohla potkat i mimo hlavní město. Akce se uskuteční v konferenčním sále Vajgar v Clarion Congress Hotelu (Pražská tř. 2306/14) se zahájením mezi 14:00 až 15:00 a … více »

    lkocman | Komentářů: 0
    včera 15:00 | Komunita

    Vývojáři Debianu zhruba v polovině vývojového cyklu Debianu 14 s kódovým názvem Forky rozhodli, že Debian musí dodávat reprodukovatelné balíčky, tj. kdokoli si může nezávisle ověřit, že daný binární balíček vznikl překladem a sestavením z konkrétních zdrojových kódů. Aktuálně je reprodukovatelných 98,29 % balíčků.

    Ladislav Hagara | Komentářů: 0
    včera 14:11 | Bezpečnostní upozornění

    Německý e-shop Škoda Auto byl hacknut. Útočníci získali přístup k uživatelským údajům (jméno, adresa, e-mail, heslo, telefon, …).

    Ladislav Hagara | Komentářů: 2
    včera 11:22 | Pozvánky

    Na webu konference Den IPv6 2026, která se uskuteční 4. června v Národní technické knihovně v pražských Dejvicích, je nyní k dispozici kompletní program této tradiční akce věnované tématům spojeným s protokolem IPv6. Na celodenní pásmo přednášek je třeba se přihlásit a zaplatit účastnický poplatek 242 korun. Registrační formulář najdou zájemci opět na webu akce. Konferenci Den IPv6 2026 organizují i letos společně sdružení CESNET, CZ.NIC a NIX.CZ.

    VSladek | Komentářů: 1
    11.5. 23:33 | Zajímavý software

    Byl představen emulátor terminálu Ratty (GitHub) s podporu 3D grafiky přímo v terminálu. Inspirací byl operační systém TempleOS od Terryho Davise. Ratty je napsán v jazyce Rust. Využívá knihovnu Ratatui pro tvorbu rozhraní a herní engine Bevy pro 3D vykreslování.

    Ladislav Hagara | Komentářů: 4
    11.5. 17:55 | IT novinky

    Evropské instituce i některé americké státy dál zpřísňují pravidla pro ověřování věku na internetu. Cílem je zabránit dětem v přístupu k obsahu pro dospělé. Úřady ale narážejí na zásadní problém – stále více lidí používá VPN, tedy služby umožňující skrýt identitu i skutečnou polohu na internetu. Právě VPN nyní Evropská parlamentní výzkumná služba (EPRS) označila za „mezeru v legislativě, kterou je potřeba uzavřít“ [Novinky.cz].

    Ladislav Hagara | Komentářů: 38
    11.5. 17:22 | Nová verze

    Multiplatformní open source aplikace pro psaní poznámek Joplin (Wikipedie) byla vydána v nové verzi 3.6. Nově lze mít v poznámkách embedovaný externí obsah, např. YouTube videa.

    Ladislav Hagara | Komentářů: 3
    11.5. 16:44 | Komunita

    Open Hardware Summit 2026 organizovaný OSHWA (Open Source Hardware Association) proběhne o víkendu 23. a 24. května v Berlíně na Technické univerzitě Berlín.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (7%)
     (3%)
     (16%)
     (25%)
    Celkem 1592 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: C makro na spocitani delky retezce

    21.4.2010 18:33 jirik
    C makro na spocitani delky retezce
    Přečteno: 624×
    Dobry den,

    rad bych se zeptal jestli jde v C nebo C++ napsat makro, kde by preprocesor spocital delku const char* retezce a vratil cislo.

    Samozrejme nemam na mysli neco takoveho #define len(str) strlen(str)

    Jde mi jen o to abych nemusel rucne doplnovat delky retezcu do kodu.

    Dekuji za odpoved.

    Řešení dotazu:


    Odpovědi

    21.4.2010 19:15 Sten
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    V C++ to jde udělat přes šablony, protože ve skutečnosti je to const char[délka].

    O existenci makra ale pochybuji.
    Řešení 1× (jirik (tazatel))
    21.4.2010 19:17 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce

    Nejde. Ale muzete to udelat bud pomoci sizeof, nebo sablon.

    #include <iostream>
    #include <cstddef>
    
    template<std::size_t N_>
    std::size_t length(const char (&s)[N_])
    {
            return N_;
    }
    
    int main(int argc, char** argv)
    {
            const char str[] = "Hello World!";
    
            std::cout << sizeof(str) << ", " << length(str) << "\n";
            std::cout << sizeof("Hello World!") << ", " << length("Hello World!") << "\n";
    
            return 0;
    }

    (Pozn.: oba dva zpusoby vraceji delku retezce vcetne ukoncovaciho null, tzn. o jednicku vetsi, nez co dava strlen().)

    21.4.2010 19:41 jirik
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    Dekuji za odpoved.

    Sablony pouzivat nechci ale ten sizeof je super. Ten me vazne nenapadl.
    21.4.2010 21:36 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    pozor, sizeof vrati spravne velikost jenom pokud je promena deklarovana jako pole, ne pokud je to ukazatel:
    #include <iostream>
    
    int main()
    {
            char const *x = "Hello world!";
            
            std::cout << x << ", " << sizeof(x) << "\n";
    }
    
    vypise velikost ukazatele, ne delku retezce!
    22.4.2010 11:35 lukas
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    Tvoj kod nie je najlepsi, pretoze sa spolieha na velkost typu char 8 bitov. Prenositelna verzia:
       ...
       const char str[] = "Hello World!";
       std::cout << sizeof(str)/sizeof(*str) << ", " << length(str) << "\n";
       ...
    
    22.4.2010 11:49 FooBar
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    Omlouvam se, ale nemuzu nezareagovat. Tohle je pitomost. C standard absolutne a nedvojznacne urcuje, ze char ma velikost 1B. Jeho kod je prenositelny vzdy a vsude.

    Samozrejme, do budoucna je to spravna praktika, ponevadz si clovek zvykne na to, ze nemuze definitivne predvidat velikost datovejch typu, nicmene v tomhle pripade je jeho kod zcela bez vyhrad na prenositelnost nebo cokoliv jinyho korektni.

    (A pokud pises na exotickou platformu, ktera ma 1B velkej treba 9 bitu, tak te to furt netrapi, ponevadz sizeof pocita s byty a ne bity)
    22.4.2010 10:31 chochi | skóre: 29 | Praha
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    A proc nepouzit strlen? Pokud to prekladas rozumnym prekladacem s dostatecnou optimalizaci, tak se to vyoptimalizuje samo :-) pr.:
    
    $ cat ll.c 
    #include <string.h>
    
    #define  STRLEN(x)      strlen(x)
    
    int main() {
            return STRLEN("rozedeleny retezec" "neurcite delky");
    }
    $ ~/src/llvm/Debug/bin/clang -O2 -S ll.c -o -
            .file   "ll.c"
            .text
            .globl  main
            .align  16, 0x90
            .type   main,@function
    main:
            pushl   %ebp
            movl    %esp, %ebp
            movl    $32, %eax
            popl    %ebp
            ret
    .Ltmp0:
            .size   main, .Ltmp0-main
    
    
            .section        .note.GNU-stack,"",@progbits
    $ gcc -O2 -S ll.c -o -
            .file   "ll.c"
            .text
            .p2align 4,,15
    .globl main
            .type   main, @function
    main:
            leal    4(%esp), %ecx
            andl    $-16, %esp
            pushl   -4(%ecx)
            movl    $32, %eax
            pushl   %ebp
            movl    %esp, %ebp
            pushl   %ecx
            popl    %ecx
            popl    %ebp
            leal    -4(%ecx), %esp
            ret
            .size   main, .-main
            .ident  "GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)"
            .section        .note.GNU-stack,"",@progbits
    
    Pro ty co nemaji radi assembler - nikde se nevola funkce strlen, ale rovnou se vrati konstanta 32 (delka retezce) v instrukci
    movl $32, %eax
    24.4.2010 02:17 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: C makro na spocitani delky retezce
    :)
    Save the whales. Feed the hungry. Free the mallocs

    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.