Portál AbcLinuxu, 14. července 2025 00:24
13 for(pom_for=0;pom_for<x;pom_for++) 14 { 15 fscanf(todosoubor,"|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|\n", &vypiss[pom_for].dulezitost, &vypiss[pom_for].dokdy, &vypiss[pom_for].nadpis, &vypiss[pom_for].popis, &vypiss[pom_for].ID_ulohy); 16 }Obsah souboru ze kterýho se čte je tady:
|**|sdf|sdf|sdf|01| |**|sdf|sdf|sdf|02| |**|sdf|sdf|sdf|03| |*|sdf|sdf|sdf|04| |***|asf|sadf|sdf|05|A co z toho vyleze, je tady:
|** | sdf | sdf | sdf |01**| |** | sdf | sdf | sdf |02**| |** | sdf | sdf | sdf |03*| |* | sdf | sdf | sdf |04***| |***| asf | sadf | sdf |05|Všem předem moc děkuji, Milan
ID_ulohy
máš nastavenou na dva znaky, ovšem to je špatně, zapomněl jsi na místo pro znak, který ukončuje řetězce '\0'
, takže se Ti tento znak uloží na první pozici pole dulezitost
, tato pozice následuje hned za poslední pozicí ID_ulohy
. Jinak příště až budeš něco ladit, tak problém rozlož na co nejmenší části, za které dáš ruku do ohně, teprve pak si můžeš být jistý, že není chyba u Tebe. zapomněl jsi na místo pro znak, který ukončuje řetězce '\0'To bude ono, diky
Teda nechci moc poučovat, ale ten kód je dost fuj.Je to jenom maturitni projekt
Osobně bych vzal soubor nebo část, načet do bufferu a zakončil NUL a pak prošel na | a LF, nahradil vždy NUL a dal pointer+1 do příslušné struktury. Je to dle mého názoru nejrychlejší a hlavně nehrozí segfaulty.Tak to planuju udelat, ale rikal sem si, ze "casu dost". Potrebuju nejprv dodelat este neco jinyho.
Protože jinak nikdy nevíš dopředu velikost.V pripade, ze user nezasahne do souboru, tak vim. A pokud zasahne? Stejne tak muze zasahnout do pameti a "poto" jakejkoli program, ne?
User muze sahnout do pameti? Jednak je to nesmysl, jednak s takovouhle argumentaci by ses taky mohl vykaslat na jakoukoliv kontrolu cehokoliv.
Co kdyz ten soubor pomrsi kvuli chybe tvoje vlastni aplikace? Segfault je jeste v tomto pripade nejlepsi konec, ale co kdyz k nemu nedojde a poskodi se data v pameti vlastnene programem? scanf je v tomto smyslu velice nebezpecna funkce a jeji pouziti je treba si dobre rozmyslet.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.