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 19:55 | Zajímavý projekt

    Průkopnická firma FingerWorks kolem roku 2000 vyvinula vícedotykové trackpady s gesty a klávesnice jako TouchStream LP. V roce 2005 ji koupil Apple, výrobu těchto produktů ukončil a dotykové technologie využil při vývoji iPhone. Multiplatformní projekt Apple Magic TouchstreamLP nyní implementuje funkcionalitu TouchStream LP na současném Apple Magic Trackpad, resp. jejich dvojici. Diskuze k vydání probíhá na Redditu.

    |🇵🇸 | Komentářů: 0
    dnes 18:22 | Nová verze

    Byla vydána nová verze 10.3 sady aplikací pro SSH komunikaci OpenSSH. Přináší řadu bezpečnostních oprav, vylepšení funkcí a oprav chyb.

    Ladislav Hagara | Komentářů: 0
    dnes 15:11 | Zajímavý software

    Cloudflare představil open source redakční systém EmDash. Jedná se o moderní náhradu WordPressu, která řeší bezpečnost pluginů. Administrátorské rozhraní lze vyzkoušet na EmDash Playground.

    Ladislav Hagara | Komentářů: 1
    dnes 14:00 | Komunita

    Bratislava OpenCamp 2026 zverejnil program a spustil registráciu. Štvrtý ročník komunitnej konferencie o otvorených technológiách prinesie 19 prednášok na rôzne technologické témy. Konferencia sa uskutoční v sobotu 25. apríla 2026 v priestoroch FIIT STU v Bratislave.

    Ladislav Hagara | Komentářů: 0
    dnes 13:44 | Humor

    Na iVysílání lze zhlédnout všechny díly kultovního sci-fi seriálu Červený trpaslík.

    Ladislav Hagara | Komentářů: 4
    dnes 04:44 | IT novinky

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl v březnu 5,33 % (Windows -4,28 %, OSX +1,19 %, Linux +3,10 %). Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 24,48 %. Procesor AMD používá 67,48 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 3
    včera 23:22 | IT novinky

    Společnost Apple slaví padesáté narozeniny. Založena byla 1. dubna 1976.

    Ladislav Hagara | Komentářů: 1
    včera 22:33 | Nová verze

    FreeTube, desktopový klient pro YouTube využívající lokální API, byl vydán ve verzi 0.24.0. Toto velké opravné vydání implementuje SABR (Server-Based Adaptive Bit Rate), což řeší část nedávných problémů s načítáním videí z YouTube, a aktualizuje základní komponenty jako Electron nebo přehrávač Shaka Player.

    |🇵🇸 | Komentářů: 2
    včera 16:33 | Humor

    Je tu opět apríl. O víkendu zmizel kamion s 12 tunami tyčinek KitKat. Firmy to využívají k aprílovým žertům. Groupon má super akci. Koupíte 1 tyčinku a dostanete 100 zdarma. Ryanair si přelepil letadla. Šéf Outlooku se ptá, proč mají v baráku 14 beden tyčinek KitKat (𝕏). Prusa Research představuje Prusa Pro ACU a vysvětluje proč přílišné sušení škodí vaším filamentům. Telefon Sony Xperia má miliónnásobný zoom (𝕏). PC.net představil Super Ultrabox 2600 se zajímavými parametry. Další aprílové novinky například na April Fools' Day On The Web.

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | IT novinky

    Společnost OpenAI, která stojí za chatovacím robotem s umělou inteligencí (AI) ChatGPT, získala od investorů 122 miliard USD (2,6 bilionu Kč). Hodnota společnosti tak dosáhla 852 miliard dolarů (více než 18 bilionů Kč). Nejnovější kolo investování se stalo největší, jaké zatím firma uskutečnila, a peníze mají posílit ambiciózní plány rozšíření výpočetní kapacity, datových center a nábor talentů.

    Ladislav Hagara | Komentářů: 15
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (30%)
     (3%)
     (5%)
     (1%)
     (14%)
     (23%)
    Celkem 1205 hlasů
     Komentářů: 29, poslední 31.3. 11:17
    Rozcestník

    Dotaz: jazyk c, argv na unsigned int

    16.4.2011 14:54 Tomasko | skóre: 4
    jazyk c, argv na unsigned int
    Přečteno: 836×
    Ahoj. Začínám tak prosím laické vysvětlování, děkuji. Potřebuji jeden parametr argv[1] převést na unsigned int a ještě zamezit, aby se v parametru nevyskytovaly písmena atd. Jen číslo od 0 do UINT_MAX.
    char *end; //pouzito pro kontrolu konverze
    unsigned int pocet_zidli= strtoul(argv[1], &end, 0);
    	if (*end != '\0')
    	{//osetreni vstupu argv[1]
    		fprintf(stderr, "%s\n", chybove_zpravy[CHYBA_ARGV1]);
    		return -1;
    	}
    
    zkoušel jsem to takhle. strtoul ale převádí string na unsigned long a já to uložím do unsigned int, je to problém? A pak ještě mi to hází když zadám např -1, nějaké hodně velké číslo, jak to prosím ošetřím děkuji.

    Odpovědi

    16.4.2011 20:48 Jirka P
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    Asi nejjednodušší je napsat si ten převod string -> int sám, není to nic těžkého. Budete tak mít plnou kontrolu nad tím, co to dělá. Takhle máte kromě záporných čísel neošetřené vstupy typu "010" (záleží, co s tím chcete).

    Ukládání do unsigned int není problém, dokud se ta hodnota do typu unsigned int vejde :)
    stativ avatar 16.4.2011 21:02 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    No, při použití strtoul() musíš zkontrolovat ještě hodnotu errno. To je právě ten případ kdy ti to vrátí velké číslo (konkrétně ULONG_MAX), protože jsi mimo rozsah unsigned long.

    To, že to ukládáš do int může a nemusí být problém. Záleží na tom, jestli se může stát, že uživatel zadá číslo větší než je rozsah int. Pro ten případ by možná nebylo od věci před konverzí zkontrolovat, zda se vstup vleze do rozsahu int.

    Pak máš ještě možnost použít sscanf().
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    16.4.2011 23:54 Jirka P
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    Ono strtoul("-1", 0, 0) sice vrátí ULONG_MAX, ale errno nenastaví, protože k přetečení nedojde. Ono je to v té manuálovce trochu jinak...
    stativ avatar 17.4.2011 08:58 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    No, k přetečení dojde, akorát ho strtoul zřejmě není schopno detekovat. V tom případě by bylo lepší použít strtol() a kontrolovat záporné hodnoty ručně.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    stativ avatar 17.4.2011 08:59 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    Tak koukám, že jsi mě se strtol() předběhl.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    16.4.2011 22:56 Tomasko | skóre: 4
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    napsal jsem to takhle:
            char *end;
            int pocet_zidli= strtoul(argv[1], &end, 0);
    	if (errno == ERANGE || *end != '\0' || pocet_zidli < 0)
    	{//osetreni vstupu argv[1]
    		fprintf(stderr, "%s\n", chybove_zpravy[CHYBA_ARGV]);
    		return -1;
    	}
    
    btw nejsou nekde man. stranky v CZ, angličtinu neovladam a resim skolni projekt s procesy a vubec nevim kde hledat info :/ jak zacit. Pritom pri prihlasovani na Bc. nikde nebylo psano, ze vsechno bude v AJ, kdyz se anglictina vyucuje az na Bc. To uz je jina kapitola..
    17.4.2011 00:05 Jirka P
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    1) To není dobrý nápad. Konverze unsigned int -> int je nedefinovaná pro (unsigned)-1. Když už jdete do znaménkových typů, použijte strtol.

    2) Chybu (téměř) vždy indikuje návratová hodnota funkce, ne errno, to pouze označuje, ke které konkrétní chybě došlo. Kdyžtak to errno aspoň vynulujte na začátku, aby tam nezůstávaly staré zbytky.

    3) Manuálovky v češtině asi těžko, ale existují knihy (i české) o C, kde je to popsané. Poptejte se v knihovně.
    17.4.2011 16:05 Sten
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    strtoul převádí na unsigned long, nikoliv unsigned int. Pokud to rovnou převedete na unsigned int, nemáte šanci detekovat přetečení mezi UINT_MAX a ULONG_MAX. Takže lépe si takto nadefinujte strtoui:
    int strtoui(const char *str, char **end, int base)
    {
        unsigned long l = strtoul(str, end, base);
        if (l > UINT_MAX) {
            errno = ERANGE;
            return UINT_MAX;
        }
        return l;
    }
    
    A nezapomeňte na to, že strtoul nemaže errno, pokud nedošlo k chybě, takže si jej před jejím voláním vymažte, tedy volání by mělo vypadat nějak takto:
    char *end;
    errno = 0;
    unsigned int pocet_zidli = strtoui(argv[1], &end, 0);
    if (errno == ERANGE || *end != 0) {
        // Chyba
    }
    
    21.4.2011 10:31 Tomasko | skóre: 4
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    Děkuji Vám. Ale chci se zeptat, stejně když dám na vstup -100, tak to vypíše 4294967295. Mělo by to vyhodit chybu.
    21.4.2011 11:55 Sten
    Rozbalit Rozbalit vše Re: jazyk c, argv na unsigned int
    man strtoul:
    Negative values are considered valid input and are silently converted to the equivalent unsigned long int value.
    Takže řešení je použít strtol (strtoll pokud chcete celý rozsah unsigned long) a ošetřit obě meze.

    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.