abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 23:22 | IT novinky

    Před 60 lety, 1. května 1964, byl představen programovací jazyk BASIC (Beginners' All-purpose Symbolic Instruction Code).

    Ladislav Hagara | Komentářů: 0
    dnes 22:22 | Nová verze

    Byla vydána nová verze 12.0 minimalistické linuxové distribuce (JeOS, Just enough Operating System) pro Kodi (dříve XBMC) a multimediálního centra LibreELEC (Libre Embedded Linux Entertainment Center). Jedná se o fork linuxové distribuce OpenELEC (Open Embedded Linux Entertainment Center). LibreELEC 12.0 přichází s Kodi 21.0 "Omega".

    Ladislav Hagara | Komentářů: 0
    dnes 12:55 | Nová verze

    Microsoft vydal novou velkou aktualizaci 2404.23 v září 2019 pod licencí SIL Open Font License (OFL) zveřejněné rodiny písma Cascadia Code pro zobrazování textu v emulátorech terminálu a vývojových prostředích.

    Ladislav Hagara | Komentářů: 0
    dnes 05:33 | Nová verze

    OpenTofu, tj. svobodný a otevřený fork Terraformu vzniknuvší jako reakce na přelicencování Terraformu z MPL na BSL (Business Source License) společností HashiCorp, bylo vydáno ve verzi 1.7.0. Přehled novinek v aktualizované dokumentaci. Vypíchnout lze State encryption.

    Ladislav Hagara | Komentářů: 0
    včera 23:55 | Humor

    Spouštět webový prohlížeč jenom kvůli nákupu kávy? Nestačí ssh? Stačí: ssh terminal.shop (𝕏).

    Ladislav Hagara | Komentářů: 7
    včera 18:11 | Nová verze

    Yocto Project byl vydán ve verzi 5.0. Její kódové jméno je Scarthgap. Yocto Project usnadňuje vývoj vestavěných (embedded) linuxových systémů na míru konkrétním zařízením. Cílem projektu je nabídnou vývojářům vše potřebné. Jedná se o projekt Linux Foundation.

    Ladislav Hagara | Komentářů: 0
    včera 17:56 | Nová verze

    Operační systém 9front, fork operačního systému Plan 9, byl vydán v nové verzi "do not install" (pdf). Více o 9front v FQA.

    Ladislav Hagara | Komentářů: 0
    včera 13:11 | Nová verze

    Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána v nové verzi 6.1. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu. Řešeny jsou také 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 3
    včera 12:33 | Zajímavý software

    Lennart Poettering na Mastodonu představil utilitu run0. Jedná se o alternativu k příkazu sudo založenou na systemd. Bude součástí systemd verze 256.

    Ladislav Hagara | Komentářů: 26
    29.4. 23:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové major verzi 3.0 postavené na Qt5/KDE Frameworks 5. Předchozí verze 2.9.0 vyšla před 6 lety a byla postavená na Qt4. Portace Amaroku na Qt6/KDE Frameworks 6 by měla začít v následujících měsících.

    Ladislav Hagara | Komentářů: 13
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (0%)
     (0%)
     (0%)
     (0%)
    Celkem 0 hlasů
     Komentářů: 0
    Rozcestník

    Dotaz: Segmentation fault při kopírování argv[]

    21.7.2008 00:10 Snur | skóre: 5
    Segmentation fault při kopírování argv[]
    Přečteno: 461×
    Zdravím. Vytvářím v céčku aplikaci která bude číst vstup přes argumenty zadané v příkazové řádce. Mám však problém s kopírováním parametrů z argv[] do připraveného pole. Ovšem tištění platných parametrů problém nedělá. Zde je část zdrojového kódu:
    #include < stdio.h >
    #include < stdlib.h >
    #include < string.h >
    
    int main(int argc, char * argv[])
    {
    	char argvtemp[100];
    	strcpy(argvtemp,argv[1]);
            .
            .
            .
    
    Při spuštění dělá toto:
    ~$ ./program --parametr="Super věc"
    Neoprávněný přístup do paměti (SIGSEGV)
    
    Když se na to podívám přes gdb tak uvidím toto:
    Breakpoint 1, main (argc=1, argv=0xbf864434) at desccreator.c:8
    8               strcpy(argvtemp,argv[1]);
    (gdb) step
    Program received signal SIGSEGV, Segmentation fault.
    0xb7e22cc0 in strcpy () from /lib/libc.so.6
    
    A když napíši tohle namísto strcpy():
    printf("%s\n",argv[1]);
    přeložím a spustím, dostanu normálně:
    ~$ ./program --parametr="Super věc"
    --parametr="Super věc"
    
    Nevíte někdo co s tím? Už si opravdu nevím rady. Připadá mi to na hlavu postavené, strcpy() přece z argv[] jen čte stejně jako printf(), tak proč u kopírování dochází k chybě a u tištění ne? Do programu takhle načítám data poprvé takže možná že dělám někde chybu. Budu vděčný za každou radu.

    Odpovědi

    21.7.2008 00:33 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: Segmentation fault při kopírování argv[]
    Nevidím důvod, proč by měl program padat, když je mu zadán parametr kratší než 99 znaků, což se v tomto případě děje, i tak je v něm ale chyba. Nelze dopředu zaručit, že bude nastaven jiný než první prvek pole, počet parametrů programu udává parametr argc funkce main. Dále je třeba dát pozor na délku řetězce.
    char *p;
    …
    if (argc >= 1) {
      p = malloc(strlen(argv[1])+1);
      if (p != NULL) {
        strcpy(p, argv[1]);
      }
    }
    …
    
    21.7.2008 00:34 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: Segmentation fault při kopírování argv[]
    Měl bych si dávat větší pozor, v podmínce má být samozřejmě argc >= 2.
    21.7.2008 00:44 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Segmentation fault při kopírování argv[]
    Netusim, cim je to sposobene, ale vsimni si vypis breakpointu:
    Breakpoint 1, main (argc=1, argv=0xbf864434) at desccreator.c:8
    argc=1 a ty sa snazis citat z argv[1].
    If you hold a Unix shell up to your ear, you can you hear the C.
    21.7.2008 03:43 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Segmentation fault při kopírování argv[]
    Ten kód je funkční (ale v pořádku není, viz předchozí příspěvky). Spíš si myslím, že v tom programu máš ještě jednu chybu, která vyvolá SIGSEGV, i když program spustíš s parametrem (nebo leda že by sis ten výpis po spuštění vymyslel), ale když program debuguješ, zapomeneš tam ten parametr dát a program slítne hned na strcpy :-)
    21.7.2008 06:07 pakanek | skóre: 28 | Vyškov
    Rozbalit Rozbalit vše Re: Segmentation fault při kopírování argv[]
    Me ten tvuj kod hazi SIGSEGV jen pokud jej spustim bez parametru. Pokud jej spustim s parametrem, tak je program v poradku.
    Všechno dobré je pro něco zlé.
    21.7.2008 12:06 Snur | skóre: 5
    Rozbalit Rozbalit vše Re: Segmentation fault při kopírování argv[]
    Máte všichni pravdu.U spouštění programu jsem na argumenty nezapomínal, ovšem během ladění v gdb už ano. Proto ten argc=1, což jsem si měl taky všimnout. Takže během všelijakých úprav se zdrojovým kódem jsem dostávál zkreslené informace o pravém původci chyby což v mém případě byla malá chyba v jedné funkci kterou jsem si napsal a chtěl rychle otestovat, proto ten nedotažený kód. Ale jak vidno měl jsem ho přece v tomto případě dotáhnout, dříve bych přišel kde dělám chybu. Taková stupidní chyba - připadám si jak blbec. Velice díky za rady.

    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.