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 21:11 | Nová verze

    Byla vydána nová verze 2.0 klienta F-Droid určeného pro instalaci bezplatných a otevřených mobilních aplikací do Androidu ze softwarového repozitáře F-Droid (Wikipedie). Jedná se o alternativu k Google Play.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | Komunita

    Debian Inference Portal nabízí vývojářům Debianu bezplatný přístup ke službám AI/LLM. Sponzorem je společnost Scaleway.

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

    Robert Ressl nalezl ve WordPressu kritickou zranitelnost CVE-2026-87902 s CVSS 9.2. Útočníkům umožňuje neoprávněný přístup k souborům a vzdálené spuštění kódu (RCE). Opravena je ve verzích 7.1.2, 7.0.6, 6.9.9…

    Ladislav Hagara | Komentářů: 0
    včera 03:33 | IT novinky

    Společnost Meta na dvoudenní konferenci Meta Connect 2026 představuje své novinky. Vypíchnout lze lehké brýle s funkci VR Meta VR Glasses. Do prodeje půjdou na jaře 2027 za cenu 1299,99 dolarů.

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

    Google Chrome 154 byl prohlášen za stabilní. Nejnovější stabilní verze 154.0.8037.57 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 108 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 6
    23.9. 14:33 | IT novinky

    Vláda sníží v příštím roce výdaje na IT služby státu o 1,4 miliardy korun. Úspory má umožnit lepší koordinace nákupu služeb napříč resorty prostřednictvím nového zmocněnce. Celkové roční výdaje státu na informační technologie a digitalizaci se podle údajů ministerstva průmyslu a obchodu pohybují okolo 20 až 25 miliard korun ročně, pro letošek bylo na 320 projektů vyčleněno 21 miliard.

    Ladislav Hagara | Komentářů: 4
    23.9. 14:22 | IT novinky

    Irská komise pro ochranu dat (DPC) uložila americké technologické společnosti Google ze skupiny Alphabet pokutu 403 milionů eur (9,8 miliardy Kč) za neoprávněné nakládání s údaji o poloze uživatelů. Firma podle komise porušila evropské nařízení o ochraně osobních údajů (GDPR). DPC uvedla, že při šetření zjistila, že si lidé nemuseli být vědomi skutečnosti, že jejich poloha byla využívána například k ovlivňování prostřednictvím reklam nebo k odvozování jejich zájmů, a mohli tak ztratit kontrolu nad svými osobními údaji.

    Ladislav Hagara | Komentářů: 2
    23.9. 02:11 | IT novinky

    Byla oznámena beta verze nového video kodeku Pyrowave pro streamování her v Steam Remote Play. S vysokou propustností a nízkou latencí. S podporou HDR a YUV 4:4:4.

    Ladislav Hagara | Komentářů: 0
    23.9. 01:11 | Nová verze

    Byl vydán Sublime Text 4 Build 4213. Sublime Text (Wikipedie) je proprietární multiplatformní editor textových souborů a zdrojových kódů. Ke stažení a k vyzkoušení je zdarma. Pro další používání je nutná licence v ceně 99 dolarů. Spolu se Sublime Merge je cena 168 dolarů.

    Ladislav Hagara | Komentářů: 0
    22.9. 21:55 | Zajímavý článek

    Firma Anthropic, tvůrce AI modelu Claude, začala v oblasti Sanfranciského zálivu v tichosti provozovat vlastní biotechnologickou laboratoř. Anthropic prý chce pomocí AI urychlit hledání léků na nemoci, jimž farmaceutický průmysl dle názoru firmy věnuje příliš málo pozornosti. Firma tvrdí, že laboratoř se zatím soustředí především na základní biologii, nikoli přímo na vývoj léčiv. Farmaceutický výzkum je pro generálního ředitele Daria Amodeie velice osobní téma, jeho otec zemřel na hepatitidu C několik málo let před objevením účinné léčby.

    AfD 💙 | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (21%)
    Celkem 2726 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: C - přístup ke jednotlivým znakům řetězce

    11.11.2009 11:19 Afill
    C - přístup ke jednotlivým znakům řetězce
    Přečteno: 1243×

    Dobrý den, řeším jedem problém, který mi docela láme hlavu. Řekněme, že mám nějaký řetězec a chci jej předat jako parametr funkci, která vrátí stejně dlouhý řetězec s přeházenými písmeny. Jak na to? Když zkusím třeba:

    char *Fce(char *str)

    {

    char *newStr = str;

    newStr[1] = newStr[6]; // Zde je již chyba!

    printf("%c\n", newStr[1]);

    return newStr;

    }

    Jde o to, že jsem zkoušel všemožné kombinace, ale zkrátka jsem nepřišel na to, jak prohodit znaky u jiného řetězce než s předem definovanou délkou (např: "char str[10];").

    Byl by někdo tak laskav a napsal mi takovou funkci která přehodí některé znaky a vrátí upravený řetězec? Děkuji


    Řešení dotazu:


    Odpovědi

    11.11.2009 11:41 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Základy
    Pane kolego, tudy cesta nevede. Pokud to má být pokus ofixlovat nějakou práci do školy, požádejte zkušenějšího kamaráda. Chcete-li opravdu programovat, musíte se to nejprve naučit.

    Dobrým začátkem s C je "Učebnice jazyka C" od P. Herouta. Ovšem vám by se ještě předtím hodila spíš nějaká středoškolská skripta o programování jako takovém.
    11.11.2009 11:54 Afill
    Rozbalit Rozbalit vše Re: Základy
    Děkuji za konstruktivní návrh, ale bohužel k řešení to nevede. Jsem zvyklý na jiné programovací jazyky, které mají práci s řetězci "jednodušší" a jsem si vědom, že mi některé základy z jazyka C unikají. Nicméně C příliš často nepoužívám. Samozřejmě jsem před položením dotazu hledal kde se dalo. Bohužel marně.

    Mimochodem nevím jak vy, ale pod pojmem "ofixlovat" si představuji něco opsat, ne něco pochopit.
    11.11.2009 14:55 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: Základy
    Děkuji za konstruktivní návrh, ale bohužel k řešení to nevede.
    Ale vede. Jen delší cestou, než jste ochoten akceptovat.
    Samozřejmě jsem před položením dotazu hledal kde se dalo. Bohužel marně.
    To jste zřejmně minul tento článek: http://www.linuxsoft.cz/article.php?id_article=842
    Mimochodem nevím jak vy, ale pod pojmem "ofixlovat" si představuji něco opsat, ne něco pochopit.
    Ano, přesně tak. Pokud chcete pochopit, hotové řešení jedné konkrétní funkce vám stačit nebude.
    11.11.2009 12:15 Afill
    Rozbalit Rozbalit vše Re: C - přístup ke jednotlivým znakům řetězce
    Už jsem na to přišel. Vytvořil jsem nový řetězec a alokoval pro něj paměť novy = (char *) malloc(strlen(stary));

    Ještě se mi to někde ztrácí v paměti, ale na to snad už přijdu.
    11.11.2009 14:21 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: C - přístup ke jednotlivým znakům řetězce
    Chyba. Řetězce v C jsou ukončeny nulou (znakem s kódem 0), který se do celkové délky nepočítá.

    Správně je tedy:
    novy = (char*) malloc(strlen(stary)+1); /* alokace stringu stejne velikosti */
    if (novy == NULL)
    {
       /* nahlasit chyby alokace */
    }
    strcpy(novy,stary);  /* zkopirovani puvodniho stringu do nove alokovane pameti */
    /* ... pouziti ... */
    
    free(novy); /* dealokace (uvolneni pameti) */
    
    Místo malloc a strcpy lze také použít strdup:
    novy = strdup(stary); /* alokace noveho stringu stejne velikosti a zkopirovani obsahu ze stareho */
    if (novy == NULL)
    {
       /* nahlasit chyby alokace */
    }
    
    /* ... pouziti ... */
    
    free(novy); /* dealokace (uvolneni pameti) */
    
    Funkce strdup() není součástí ANSI C, tedy nemusí být přenositelná na jiné systémy.
    11.11.2009 12:26 Marble | skóre: 27 | blog: marble
    Rozbalit Rozbalit vše Re: C - přístup ke jednotlivým znakům řetězce
    Ta funkce je IMO v pořádku. Teda záleží na tom, co přesně od ní čekáš. Pokud ji budeš volat s parametrem, který je odkazem do paměti na alokovaný string, tak fajn. Pokud ji ale budeš volat s konstantou (Fce("ABCDEFGHIJ");), tak skončí na tom, že se snaží měnit právě přímo svůj parametr.

    Přiřazení lokální proměnní na začátku totiž jen přiřadí ten pointer, tudíž je vlastně zbytečné. Předpokládám, že cheš ve funkci vytvořit kopii stringu a tu upravit. V tom případě se v čistém C nevyhneš mallocu nové paměti, do které ten string zkopíruješ (strcpy) a pak teprv budeš upravovat.

    Jo a ten, kdo tu funkci volal si pak samozřejmě musí alokovanou pamět uklidit. Funkce sama to z principu udělat nemůže.

    Druhým přiblížením, použitým v některých C knihovnách, je místo alokace paměti použít nějakou globální proměnnou deklarovanou v knihovně, ve které je i ona Fce (tahle proměnná nemusí být viditelná ven z knihovny). Fce si pak string zkopíruje do této proměnné. Výhodou je, že volající nemusí uklízet pamět, nevýhodou je, že po opětovném volání Fce je pamět přepsána a tudíž pointer vrácený dřívějším voláním bude odkazovat na "špatný" string. (Každé volání prostě vrátí stejný pointer.)

    11.11.2009 12:38 moira | skóre: 30 | blog: nesmysly
    Rozbalit Rozbalit vše Re: C - přístup ke jednotlivým znakům řetězce
    Je důvod proč nepoužít strrev?
    Překladač ti nikdy neřekne: "budeme kamarádi"
    20.11.2009 17:12 bajo | skóre: 3
    Rozbalit Rozbalit vše Re: C - přístup ke jednotlivým znakům řetězce
    jedine co tu potrebujes je troska pochopit ukazovatele. Vidiet za im nerozumies.
    20.11.2009 18:39 ext3fs
    Rozbalit Rozbalit vše Re: C - přístup ke jednotlivým znakům řetězce
    Pokud jde jen o prehozeni tak neco takoveho by mohlo fungovat:
    char *prehod(const char *str)
    {
    char *buff;
    int n, i = 0;
    
        if ((buff = (char *)malloc((strlen(str) + 1) * sizeof(char))) == NULL)
        {
            fprintf(stdout, "Chyba alokace.\n");
            exit (1);
        }
    
        for(n = strlen(str) - 1; n >= 0; n--)
            buff[i++] = str[n];
    
        buff[i] = '\0';
    
        return (buff);
    }
    
    int main(void)
    {
    char str[5];
    
        strcpy(str, "ahoj");
    
        fprintf(stdout, "%s\n", prehod(str));
    
        return (0);
    }
    
    

    Založit nové vlákno • Nahoru

    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.