NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 6 - Rozdíly mezi textovými a binárními soubory v jazyce C

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na DarkCoder
Patrik Pastor:1.9.2019 21:00

no mi to bez source souboru nebralo deklarovane funkce, takze jsem inkludoval i je a uz to fungovalo

 
Odpovědět
1.9.2019 21:00
Avatar
Odpovídá na DarkCoder
Patrik Pastor:2.9.2019 12:32

nerozumim tomuto zapisu: *tmp++ = value % 10 + '0', value /= 10;
mohl bys to prosim vysvetlit? (je to z komentare, kde @coells dava implementaci funkce, ktera zapisuje textovy soubor velmi rychle)

 
Odpovědět
2.9.2019 12:32
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:2.9.2019 14:53

Jedná se o úsek programu, ve kterém se převádí číslice čísla value do znakové podoby odzadu. Výraz value % 10 vrací poslední číslici čísla, přičtením k hodnotě '0' se získá její znakový ekvivalent. Výraz value /= 10 provádí "mazání" poslední číslice čísla, čímž se pro další iterakci cyklu vytváří prostor pro převod další číslice do znakové podoby.

Pro představu se podívej na následující úsek programu:

int value = 12345;

while (value > 0) {
        putchar(value % 10 + '0');
        value /= 10;
}

Na obrazovku se postupně budou vypisovat znaky do podoby: 54321.

Odpovědět
2.9.2019 14:53
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:2.9.2019 17:24

dik uz chapu. Ale normalne by me to nenapadlo. Co mam precist/nastudovat abych takhle uvazoval?

 
Odpovědět
2.9.2019 17:24
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:2.9.2019 17:34

Programovat, studovat cizí programy, naučit se cokoli analyzovat, optimalizovat a pochopit, umět ladit, přemýšlet na problémem a řešením, umět využít všechny možnosti programovacího jazyka, koncentrovat se...

Odpovědět
+1
2.9.2019 17:34
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:2.9.2019 18:39

jeste jedna vec t = *tmp, *tmp-- = *dst, *dst++ = t; - jak to, ze muze napsat vse na jeden radek (tj bez semicolon) ale pouziva ciste carky mezi prikazy?

 
Odpovědět
2.9.2019 18:39
Avatar
DarkCoder
Člen
Avatar
Odpovídá na DarkCoder
DarkCoder:2.9.2019 19:58

Protože využívá operátoru čárka, který slouží ke zřetězení několika operací. Vysloveně říká překladači: "udělej tohle a tohle a tohle."

Nejčastěji to je vidět ve for cyklech v inicializační a inkrementační části při práci s vícero proměnnými.

for(i=0, j=0; i+j < val; i++, j++) …

V seznamu výrazů je jeho hodnota dána výrazem, který stojí nejvíce vpravo:

val = (i, 10, 100, 1000);

V předchozím příkladu bude mít proměnná val hodnotu 1000. Závorky jsou nutné z důvodu priorit operátorů (operátor čárka má nižší prioritu nežli přiřazovací operátor).

Editováno 2.9.2019 19:58
Odpovědět
2.9.2019 19:58
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:2.9.2019 20:44

Dobre ale pokud je dano vice promennych oddelenych carkou, musi byt prece nejak logicky svazany, napriklad

int x,y,z;

coz chapu - protoze vsechny promenne xyz maji stejny datovy typ int. Ale priklad
*tmp++ = value % 10 + '0', value /= 10; moc dobre nechapu, kdyz tady zadna logika mezi prikaze neni (nebo ji aspon nevidim - value je neco jineho nez *tmp). Pokud bych "retezil prikazy" potom bych prece nepouzival ';' stredniky vubec protoze bych vsechno nahazel na jeden radek a argumenty oddelil carkami (promenne bych treba deklaroval nahore v souboru, ale prikazy bych nabombil oddelneymi carkami). Jak to tedy ve skutecnosti je?

 
Odpovědět
2.9.2019 20:44
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:2.9.2019 21:01

Řetězí se výrazy nikoli příkazy. Příkaz je výraz zakončený středníkem a tam už není co řetězit. Uskupení několika příkazů do jedné jednotky je blok příkazů, ale to už je mimo toto téma.

Ano, při deklaraci proměnných oddělených čárkou bývá obvykle vazba. Obvykle se takto vazbí proměnná a ukazatel na ni. Je ale úplně něco jiného deklarovat více proměnných stejného typu a řetězení výrazů.

Samozřejmě že tam je logika. V prvním výrazu získáváš znakovou podobu poslední číslice, v druhém příkazu tedy po provedení prvního příkazu se zbavuješ poslední číslice, čímž získáváš novou poslední číslici. Obě tyto operace jsou součástí jedna druhé, proto zde může být použit operátor čárka. Nic nebrání napsat obě operace samostatně, každou na samostatném řádku a oddělit středníkem. Že jsou ve výrazech odlišné typy, to je úplně jedno. Hlavní je smysl a vazba obou operací. Na mnoha místech "lze" místo středníku použít operátor čárku, ale takovéto používání operátoru čárka je považováno za velmi špatný formát zápisu.

Odpovědět
+1
2.9.2019 21:01
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:3.9.2019 15:17

jak presne funguje pointerova aritmetika zde:

int pozice = strstr(p_aktualni->jmeno, jmeno) - p_aktualni->jmeno;

rekneme kuprikladu:
aktualni.jmeno = Alena (5 bytu)
hledam:
jmeno = lena (4 byty)

potom podle rovnice:
jmeno -aktaulni.jmeno = 4-5

to je zaporne cislo (resp. adresa) - to by ale neproslo podminkou kde musi byt
pozice vetsi nez 0.

Pointerovou aritmetiku jsem si cetl, tam je ale posunovani o jednotlivych bajtech v retezcich (adresach bajtech). Jak je to ale mysleno tady?

 
Odpovědět
3.9.2019 15:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 33.