Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Mlocik97

Stran: 1 ... 48 49 [50] 51
736
nulový ukazatel je standardem jazyka C definován jako ukazatel s číselnou hodnotou nula.
Proč?
To by ses musel zeptat Dennise Ritchieho.
Jenže ten to nevymyslel, vzniklo to roky před Unixem i C: https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare ;)

Ve skutečnosti je to prasecká ojebávka, související s fungováním procesorů, která má zaručit, že když se chybně napsaný program pokusí číst nebo dokonce zapisovat tam, kde kromě operačního systému nemá nikdo co pohledávat, tak dojde k přerušení, a OS ho bez milosti odstřelí jak rudoarmějec nácka. Takže jako vyjádření chyby se prostě vrací adresa úplného počátku operační paměti -> 0.

konečne niekto, kto tomu rozumie,... :-)

737
nulový ukazatel je standardem jazyka C definován jako ukazatel s číselnou hodnotou nula.
Proč?
To by ses musel zeptat Dennise Ritchieho. Osobně předpokládám, že je to proto, abys mohl s ukazatelem zacházet úplně stejně jako s integerem, což se v dobách, kdy bylo C nejvíce relevantní jazyk dost hodilo. Navíc přiřadit speciální význam právě nule dává tak nějak intuitivně smysl.

NULL je makro definované jako (void*)0, '\0' je znakový literál reprezentující číselnou nulu. Oboje je víceméně syntaxtický cukr, aby nebylo nutné explicitně psát ptr != (void*)0 a str[N-1] = (char)0. Je nanejvýš děsivé, že ač je C staré šestačtyřicet let a leckde se vyučuje v základech algoritmizace jako první jazyk to chápe jediný lopata...

díky za pochvalu..  ;D nebo koho si tu lopatu myslel?

738
nulový ukazatel je standardem jazyka C definován jako ukazatel s číselnou hodnotou nula.
Proč?

protože on to tvrdí... NULL a '\0' nie je to iste a nikdy ani nebolo...

739
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.
Hodnota NULL je stejná jako '\0', prostě 0. Typ je jiný, C pro NULL nespecifikuje typ, může to být (int) nebo třeba ((void*) 0). Ty vracíš returnem (char) 0, což se automaticky zkonvertuje na (int) 0, respektive ((void*) 0), neboli NULL.
NULL je NULL. Spolehat ze to je typove shodne s \0, 0 nebo "" je znak nevyzratosti programatora.


presne

740
ja když predám funkci b_e prázdny string, tak to vráti prázdny string a teda aj vypíše prázdny riadok... v prípade že mu predám NULL tak vypíše NULL.
V tom případě děláš něco blbě, protože tvůj vlastní kód dělá něco jiného, pro prázdný string vrací '\0' alias 0 alias NULL.

'\0' nieje žiadna alias NULL!!!!!!!!!!!!!

741
vy ste schopný i autorov jazyka C prehovoriť že v ich jazyku je NULL to isté čo '\0' ... smutné, hlavne že oni sami píšu že to to isté nieje.

742
ja když predám funkci b_e prázdny string, tak to vráti prázdny string a teda aj vypíše prázdny riadok... v prípade že mu predám NULL tak vypíše NULL.

743
nerozumieš tomu.... konec debaty. Když nedokážeš porozumieť ani tomuto:
https://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0
tak je to tragické.

744
Neviditelný, prečítaj si http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf sekci 6.3.2.3, §3

resp. aký je rozdiel medzi

Kód: [Vybrat]

a

Kód: [Vybrat]
00000000

745
Protoze pak neni ta metoda ten chliv, co jsi poslal, ale neco, co se da precist a pochopit.

takže podľa tebe je jednoduchšie povedať "chcem dolnú časť žemle hamburgeru na ňom kurací rezeň, a na ňom hornú časť žemle hamburgeru" než "chcem kurací hamburger", to je teda fajn logika. Čitatelnejšie to o nič nieje, a ani to nepotrebuješ. Predsa si hamburger kupuješ ako celok. Obsah hamburgeru zaujíma len zamestnanca mcdonalda, ktorý ale vytvára celistvý "produkt" teda hamburger.

746
Aha, zřejmě jsme se nepochopili. Pokud odstraním NULL kontrolu a předám funkci NULL pointer, samozřejmě to spadne. Pokud té funkci ale předám řetězec nulové délky (ta druhá kontrola), funkce b_e taky vrátí NULL. Z kódu není zřejmé, zda jsi to tak chtěl je to typický Cčkový bug.

nerozumíš tomu... prečítaj si toto PDF... NULL vs '\0' je ako když ti dá niekto do ruky prázdnu krabicu a v druhej ruke by si nič nemal, a niekto ti povedal, porovnaj to... samozrejme že v rukách nedržíš to isté "akože nič (jak bys to pojmenoval)". A skus si výsledok b_e nekde vypsať... týmto kódom:

Kód: [Vybrat]
int main(int argc, char const *argv[]) {
        unsigned char* b_ev = b_e(argv[1]);
if (b_ev != NULL) {
size_t k = strlen((char*)b_ev);
for (size_t i = 0; i < k; i++) {
printf("%x", (unsigned int)b_ev);
}
printf("\n");
} else {
printf("NULL\n");
}
free(b_ev);
b_ev = NULL;
}

v jednom prípade ti do konzole vypíše NULL v druhom zas prázdny riadok. p.s. to je taky môj kód. Rozdiel je teda
Kód: [Vybrat]
./a
a
Kód: [Vybrat]
./a ""

747
Protoze pak neni ta metoda ten chliv, co jsi poslal, ale neco, co se da precist a pochopit.

naopak... môj kód je omnoho prehladnejší než 99% zdrojákov v Pythone nejakých zmysluplnejších projektov.

749
rozhodne nesúhlasím.

Citace
Mně teda spíš než pojmenování proměnných vadí ten dvojí způsob zápisu return NULL;, který musí druhý programátor rozluštit a zamyslet se, zda je to bug nebo zamýšlené chování.

čože? ja tam nikde nevidím dvojí způsob zápisu return NULL; Druhý if nieje kontrola na NULL ale na prázdnu hodnotu,... rozdiel:


Aha, takže je to tedy bug. '\0' má numerickou hodnotu nula, takže výsledek return NULL a return '\0' je stejný - vyzkoušej si to. (Pro hnidopichy: je stejný za předpokladu, že makro NULL je definováno jako nula.) Předpokládám, že spíš než return '\0' bylo myšleno return "". Vzhedem k tomu, že ten kód jinak vrací pointer na dynamicky alokovanou paměť by ale i to bylo špatně.

ne neni to stejný.... ani zdaleka. skus odstraniť overenie na NULL, a predaj ten metóde parameter NULL, nepôjde to.
Zatiaľ čo NULL znamená NULL teda nič. Tak prázdna hodnota znamená že je niekde v pamäti miesto, kde je premenná s prázdnou hodnotou. A '\0' je v podstate zakončenie stringu, ktorá je v C reprezentovaná poľom znakov.

Protoze ti to umozni veci pojmenovat.

a čo z toho pomenovania mám? to je jak kdybych si prišiel do mcdonaldu a pomenoval by som každú časť hamburgera ktorý si chem kúpiť... namiesto teda "chcem kurací hamburger" by som povedal "chcem dolnú časť žemle hamburgeru na ňom kurací rezeň, a na ňom hornú časť žemle hamburgeru". Abstrakce k hovnu.

750
rozhodne nesúhlasím.

Citace
Mně teda spíš než pojmenování proměnných vadí ten dvojí způsob zápisu return NULL;, který musí druhý programátor rozluštit a zamyslet se, zda je to bug nebo zamýšlené chování.

čože? ja tam nikde nevidím dvojí způsob zápisu return NULL; Druhý if nieje kontrola na NULL ale na prázdnu hodnotu,... rozdiel:


Stran: 1 ... 48 49 [50] 51