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 14:00 | Zajímavý článek

    Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    včera 12:00 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 12.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 0
    17.7. 18:44 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 155 (pdf) a Hello World 27 (pdf).

    Ladislav Hagara | Komentářů: 1
    17.7. 16:11 | Nová verze

    Hyprland, tj. kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, byl vydán ve verzi 0.50.0. Podrobný přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 2
    17.7. 15:55 | Komunita

    Patrick Volkerding oznámil před dvaatřiceti lety vydání Slackware Linuxu 1.00. Slackware Linux byl tenkrát k dispozici na 3,5 palcových disketách. Základní systém byl na 13 disketách. Kdo chtěl grafiku, potřeboval dalších 11 disket. Slackware Linux 1.00 byl postaven na Linuxu .99pl11 Alpha, libc 4.4.1, g++ 2.4.5 a XFree86 1.3.

    Ladislav Hagara | Komentářů: 5
    16.7. 21:22 | IT novinky

    Ministerstvo pro místní rozvoj (MMR) jako první orgán státní správy v Česku spustilo takzvaný „bug bounty“ program pro odhalování bezpečnostních rizik a zranitelných míst ve svých informačních systémech. Za nalezení kritické zranitelnosti nabízí veřejnosti odměnu 1000 eur, v případě vysoké závažnosti je to 500 eur. Program se inspiruje přístupy běžnými v komerčním sektoru nebo ve veřejné sféře v zahraničí.

    Ladislav Hagara | Komentářů: 19
    16.7. 16:22 | IT novinky

    Vláda dne 16. července 2025 schválila návrh nového jednotného vizuálního stylu státní správy. Vytvořilo jej na základě veřejné soutěže studio Najbrt. Náklady na přípravu návrhu a metodiky činily tři miliony korun. Modernizovaný dvouocasý lev vychází z malého státního znaku. Vizuální styl doprovází originální písmo Czechia Sans.

    Ladislav Hagara | Komentářů: 26
    16.7. 15:33 | Upozornění

    Vyhledávač DuckDuckGo je podle webu DownDetector od 2:15 SELČ nedostupný. Opět fungovat začal na několik minut zhruba v 15:15. Další služby nesouvisející přímo s vyhledáváním, jako mapyAI asistent jsou dostupné. Pro některé dotazy během výpadku stále funguje zobrazování například textu z Wikipedie.

    bindiff | Komentářů: 8
    16.7. 13:33 | Bezpečnostní upozornění

    Více než 600 aplikací postavených na PHP frameworku Laravel je zranitelných vůči vzdálenému spuštění libovolného kódu. Útočníci mohou zneužít veřejně uniklé konfigurační klíče APP_KEY (např. z GitHubu). Z více než 260 000 APP_KEY získaných z GitHubu bylo ověřeno, že přes 600 aplikací je zranitelných. Zhruba 63 % úniků pochází z .env souborů, které často obsahují i další citlivé údaje (např. přístupové údaje k databázím nebo cloudovým službám).

    Ladislav Hagara | Komentářů: 5
    16.7. 00:11 | Nová verze

    Open source modální textový editor Helix, inspirovaný editory Vim, Neovim či Kakoune, byl vydán ve verzi 25.07. Přehled novinek se záznamy terminálových sezení v asciinema v oznámení na webu. Detailně v CHANGELOGu na GitHubu.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (3%)
     (0%)
     (1%)
     (4%)
    Celkem 410 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: C nastavení parametrů fscanf()

    17.5.2011 11:46 Igor
    C nastavení parametrů fscanf()
    Přečteno: 947×
    Dobrý den, Mám vstupní soubor, kde na každém řádků je 5 řetězců znaků různé délky. Každý řetězec je oddělen mezerou, občas dvěmi. Jedtnotlivé řetězce jsem do svého programu načítal pomocí funkce fscanf().
    fscanf(fr, "%s %s %s %s %s", &retezec1, &retezec2, &retezec3, &retezec4, &retezec5);
    Můj problém je, že já potřebuju, aby z každého řetězce bylo načteno pouze 5 prvních znaků. Pokud jich je náhodou víc potřebuju, aby byly za pátým znakem useknuty. Definoval jsem si tedy proměné retezec jako pole 5 charů. Žil jsem v domění, že funkce fscanf automaticky řetězec usekne, ale neděje se tak. Pokud je náhodou řetězec delší program spadne.

    Je to jednoúčelový program a moc programování nerozumím, proto teď nevím moc jak dál. Dá se nějak funkce fscanf nastavit, aby z každého řetězce přečetla pouze prvních pět znaků do první proměné - poté přeskočila na další řetězec a načetla opět prvních 5 znaků do další proměné a tak dále?

    Předem děkuju za radu.

    Řešení dotazu:


    Odpovědi

    17.5.2011 11:55 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    fscanf(fr, "%5s %5s %5s %5s %5s", &retezec1, &retezec2, &retezec3, &retezec4, &retezec5);
    Project Satan infects Calculon with Werecar virus
    17.5.2011 17:09 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
        #include <stdio.h>
        #include <string.h>
         
        #define STR_MAX     32
        #define STR_SIZE     5
        #define TO_STR_SIZE "5"
        #define WORDS_IN_ROW 5
         
        int main(int argc, char *argv[])
        {
            FILE *f;
            f=fopen("file.txt", "r");
            if (f != NULL)
            {
                char str[WORDS_IN_ROW][STR_SIZE+1];
                int i;
                for (i=0;i<WORDS_IN_ROW;i++)
                {
                     fscanf(f, "%" TO_STR_SIZE "s", &str[i]);
                     str[i][STR_SIZE]='\0';
         
                     if (i<WORDS_IN_ROW-1)
                     {
                         char c;
                         if ((c=fgetc(f)) != ' ')
                         {
                             char tmp[STR_MAX];
                             fscanf(f, "%s ", &tmp);
                         }
                         else
                         {
                             ungetc(c, f);
                         }
                     }
                }
         
                for (i=0;i<WORDS_IN_ROW;i++)
                {
                    printf("%d: %s\n", i, str[i]);
                }
         
                fclose(f);
            }
            return 0;
        }
    
    Project Satan infects Calculon with Werecar virus
    17.5.2011 12:00 NN
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    fscanf(fr,"%5c", &retezec);
    ?

    NN
    17.5.2011 12:11 Igor
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Děkuji, ale tohle má pokud vím za následek to, že to do retezec1 načte pět znaků ale nepřeskočí v souboru na další řetězec, a do retezec2 začne načítat další znaky ovšem z prvního řetězce tam kde skončil.
    17.5.2011 12:26 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Přes fscanf to nepůjde, bohužel.
    17.5.2011 12:32 Igor
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    A nějaká jiná funkce rozumnější existuje? Mě napadá leda číst po znaku nějakým fgetc() a počítat znaky, ale tam budu muset ještě hlídat mezery. Na fscanf() se mi líbilo, že jsem vůbec nemusel řešit mezery. A celkově to bylo jednoduchý a přehledný.
    skunkOS avatar 17.5.2011 12:58 skunkOS | skóre: 27 | blog: Tak nějak
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Mno určitě bych použil komubinací funkcí STRTOK, FGETS.

    http://www.cplusplus.com/reference/clibrary/cstring/strtok/

    A napsat si funkci která bude vracet řetězec X prvních znaků z nějakého nadřetězce. Typicky "Popokatepetl" >>> char *vratXznaku(char*, int x = 5) >> "Popok"

    Tohle se dá samozřejmě udělat i s funkcemi ze string.h.
    http://martinrotter.github.io
    17.5.2011 13:02 Igor
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Jasně to vypadá celkem reálně. Sice se v tom moc zatím nevyznám, ale to určitě nastuduju. Děkuju
    pavlix avatar 17.5.2011 13:05 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Vždycky to jde udělat ručně, načíst celý řádek a po znacích ho zpracovávat. Všechny tyhle funkce slouží jen k ulehčění. Doporučuju si někdy aspoň cvičně to ruční zpracování napsat. Pak teprv pochopíš a oceníš, co ty zjednodušující funkce nabízejí.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    17.5.2011 14:15 jekub
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    char retezec1[MAX_LEN], ..., retezec5[MAX_LEN];
    fscanf(fr, "%s %s %s %s %s", retezec1, ..., retezec5);
    
    retezec1[5] = ... = retezec5[5] = '\0';
    
    
    C uz jsem dlouho neuzival, ale maji tam skutecne byt ty &?
    pavlix avatar 17.5.2011 14:28 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Mno, ono to vůbec takhle používat nejde, kvůli přetečení.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    17.5.2011 23:25 l4m4
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Nejjednodušší je neblbnout, použít formát %as (GNU rozšíření), takže to řetězce samo naalokuje libovolně dlouhé - a pokud je z nich zapotřebí vzít pouze prvních pět znaků, tak je triviálně oříznout po načtení způsobem
    if (strlen(s) > 5)
       s[5] = '\0';
    
    A nezapomenout pak uvolnit pomocí free().

    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.