Új hozzászólás Aktív témák
-
sghc_toma
senior tag
számunkra fura dolgot találtunk tegnap programozás közben.. a kódban maradt egy olyan sor, hogy zárójelben egy pár érték, valahogy így: (4, "sdfg", 23).. A kód lefordult, a progi működött.. megnéztem objdump-pal ennek a két forrásnak megfelelő progit:
int main() {(1,2,3,4); printf("qwer"); return 0;}
, illetve
int main() {printf("qwer"); return 0;}
semmi különbség nincs az assembly kódok közt...
a kérdésem: ez mitől "érvényes" kód c-ben, c++-ban?in asm we trust
-
sghc_toma
senior tag
OK, kösz mindkettőtöknek.
in asm we trust
-
sghc_toma
senior tag
válasz Bettina87 #396 üzenetére
azt várja, hogy az eredeti (értsd: első kiadású) KR könyvben leírtak alapján írjátok meg a házit.. a bekopizott válaszlevele alapján KR-féle kódokat írtatok órán is.. gyakorlatilag visszakéri, amit tanultatok..
félreértés ne essék: nem értem miért kell egyáltalán tanítani a KR C-t.. nekem kellett Fortran-t tanulnom, utáltam, és tudtam, hogy gyakorlatilag semmi hasznát nem veszem majd.. ennek ellenére az órai anyag alapján mindig megírtam a házit..
nem hinném, hogy embertelen feladat lenne egy problémát KR C-ben megírni, csak ehhez ugye ismerni kéne a nyelvet.. márpedig azt Nektek megtanították, vagy mi...in asm we trust
-
sghc_toma
senior tag
válasz Fire/SOUL/CD #539 üzenetére
egy tanács: a gets függvényt érdemes elásni.. jó mélyre.. olyan gyönyörű buffer overflow-t lehet vele gyártni, hogy ihaj.. ott van helyette pl. az fgets: harmadik paraméter stdin, és ugyanazt csinálja, mint a gets, csak kultúráltabban..
[ Szerkesztve ]
in asm we trust
-
sghc_toma
senior tag
válasz Fire/SOUL/CD #541 üzenetére
hello!
ahogy dabadab mondja, egy túl hosszú input csinálhat gonosz dolgokat.. próbáld ki mondjuk 300-400 számjeggyel, úgy tuti felülírod a return address-t a stack-en valami hülyeséggel, és kapsz egy segfault-ot.. persze a mai fordítókban vannak mindenféle védelmek overflow-k ellen, de azért nem szabad csak azokra támaszkodni..
in asm we trust
-
sghc_toma
senior tag
válasz Fire/SOUL/CD #544 üzenetére
Hello!
Semmi gond, én is találkoztam már beszólogató emberkékkel
Tény, hogy lehet szívni az stdin-nel, amíg az ember nem tudja, hogyan is működik az a fránya input buffer. Az a baj, hogy a gets-el akkor is szívhatsz, ha tisztában vagy a dolgok működésével - ugyanis semmilyen lehetőséged nincs biztosan elkerülni a túlcsordulást.
Azzal érvelsz, hogy a programozást oktató tanárok ezt nem tanítják. Ellopom az érvedet, és felhasználom A tanárok pl. a gets veszélyeire sem hívják fel a figyelmet.
Azért nem tartom jó ötletnek a gets használatát példakódban, mert akkor a programozópalánta azt ismeri meg, azt fogja használni, pedig van biztonságos(abb) megoldás is. Persze ahhoz többet kell tanulnia, meg pötyögnie, de potenciális b0f-t nem szabad benthagyni egy programban. Szerintem.
in asm we trust
-
sghc_toma
senior tag
válasz Benmartin #546 üzenetére
Szia!
Igazad van, beadandóimban én sem mindig csinálok teljes input-validációt, mert minek. Viszont ez tudatos. Azért említettem meg a dolgot, mert ha a kezdő programozóba belerögzül, hogy gets, és nem ismeri annak veszélyeit, akkor simán elképzelhető, hogy production code-ban is használni fogja.
in asm we trust
-
sghc_toma
senior tag
Kösz, szóval ha kiértékeli az egyik egyenlőség jelet, akkor már nem foglalkozik a másikkal? (erre nem gondoltam)
nem erről van szó.. kiértékeli azt a kifejezést, hogy 9999 <= szam.. ez vagy igaz, vagy nem.. utána ezt az értéket (igaz, vagy hamis) hasonlítja össze 100000-rel.. a hamis 0, az igaz 1, mindkettő kisebb százezernél -> mindig igaz lesz a feltétel..btw, ha a számod egyenlő 9999-cel, akkor csak négyjegyű.. illetve a 100001 is ötjegyű.. szóval a feltétel helyesen: x > 9999 && x < 1000000
// ehh, elkéstem...
[ Szerkesztve ]
in asm we trust
-
sghc_toma
senior tag
válasz gygabor88 #1022 üzenetére
maganvelemeny kovetkezik, nem megkovezni erte
annyira nagyon nem ismerem a Stroustroup konyvet (referencianak hasznaltam parszor), de szerintem teljesen kezdonek nem a legmegfelelobb.. tul sok infot tartalmaz elsore.. szerintem sokkal jobban lehet tanulni egy olyan konyvbol, ami kisebb problemak megoldasan keresztul nyujt betekintest a nyelvbe.. amikor meg mar van egy ralatasod a dolgokra (es erdekel is a dolog), ugyis utananezel az apro finomsagoknak..azzal az altalanosan elfogadott nezettel sem ertek egyet, hogy eloszor C, aztan C++.. nem irom le, hogy miert, mert Bartosz Milewski nagyon jol leirja a C++ In Action cimu konyveben, es maximalisan egyetertek vele..
Meg egy konyv van, amit tudok ajanlani C++-hoz: Thinking In C++..
in asm we trust
-
sghc_toma
senior tag
en is igy latom.. Basic-kel, Pascal-lal kezdtem, es nagyon sokaig tartott, mire felnyilt a szemem, es megtanultam igazan hasznalni a C++ adta lehetosegeket..
gygabor88: Thinking In C++-t ezert szeretem nagyon; alaposan bemutatja a nyelvet, es mindezt jo peldaprogikon keresztul teszi..
in asm we trust
-
sghc_toma
senior tag
válasz Elektromann #1066 üzenetére
Win32 alkalmazasnal alapbol az INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT) a belepesi pont.. ilyened nem volt, ezert a linker nem is talalta..
in asm we trust
-
sghc_toma
senior tag
Udv!
CreateProcess-rol gondolom, hogy Win32 API-val dolgozol.. ha esetleg megsem, es mashol is van CreateProcess, akkor a hsz-em tobbi resze ignoralando
a CreateProcess az utolso parametereben egy PROCESS_INFORMATION-re mutato pointert ker, es ebben a strukturaban tobbek kozott visszaadja a process id-t.. egy ciklusban megprobalhatsz HANDLE-t kerni a process-hez az id alapjan az OpenProcess fv-el.. ha a HANDLE == NULL, akkor mar nem fut a processz.. (nemi kis sleep-et rakjal a ciklusba, kulonban felzabalja a procit)in asm we trust
-
sghc_toma
senior tag
kampi_ (#1074): bocs, hogy nem valaszoltam, nyaraltam, es a Vodafone-os mobilnettel nem jottek be az oldalon a hsz-ek..
Jester01 (#1088): az OpenProcess doksijaban le van irva, hogy NULL-t ad vissza hiba eseten, szoval ebben nincs semmi meglepo.. ami meglepo lehetne, hogy rossz handle-t jelezhet NULL es IVALID_HANDLE_VALUE is (fuggevnye valogatja), de ezen meg azert nem lepodunk meg, mert tudjuk, mennyire konzisztens a Win32 API amugy azert letezik az IVALID_HANDLE_VALUE, mert egy par Win32 fv 16 bites elode -1-gyel tert vissza, es meg kellett orizni a kompatibilitast..
in asm we trust
-
sghc_toma
senior tag
válasz gygabor88 #1176 üzenetére
nem szukseges beallitani, ha .c a kiterjesztes, automatikusan C-kent fordit..
amugy a project Properties|C/C++|Advanced|Compile As helyen lehet beallitani az egesz project-re (ezt felulirja a kiterjesztes).. adott file-ra is be lehet allitani, ekkor ertelemszeruen a file Properties lapjan kell beallitani, nem a project-en..in asm we trust
-
sghc_toma
senior tag
válasz -=Lord Tom=- #1185 üzenetére
az elozo beolvasas utan ottmarad az stdin-en egy '\n', es ezt olvassa be a masodik scanf.. csinalhatod azt, hogy olvasas elott kiurited az stdin-t mondjuk igy:
char c; while ((c = getc(stdin)) != EOF && c != '\n');
ja, es az osszehasonlitasnal ne "-t hasznalj, hanem '-t.. a "+" igazabol ket karakter, a vegen van egy '\0'..
in asm we trust
-
-
sghc_toma
senior tag
-
sghc_toma
senior tag
az okozza, hogy nincsenek fent az adott gepen a te forditodnak megfelelo runtime library-k.. ket lehetoseged van:
- feltelepititek a runtime-ot (vcredist.exe neven valahol ott van a Visual Studio konyvtaraban, vagy MS-tol is le lehet tolteni)
- statikusan linkeled a runtime-ot az exe-dhez (Project Properties | C/C++ | Code Generation | Runtime Library, es itt /MD helyett /MT)in asm we trust
-
sghc_toma
senior tag
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- AKCIÓ Új Dobozos Macbook Pro dokkoló új ára 70.000 forint
- ThinkPad Hybrid USB -C USB -A Dock 40AF Új ára 80.000 Forint Ingyen szállítás
- Xiaomi Redmi Note 9s 128/6 GB 34.9E !!!
- Új Hp Pavilion 15-eh Fémházas Szuper Laptop 15,6" -30% AMD Ryzen 7 5700U 8Mag 16/1TB FHD MATT
- ATI RADEON RX 480 -8 gb DDR5 256 bit videokártya