Aktív témák
-
Miracle
senior tag
válasz
Jester01
#168
üzenetére
Mellesleg Miracle kódjával vigyázni kell, mert bár úgy látszik mintha új stringet adna vissza, valójában helyben fordítja meg. Ezzel két baj van: az összes többi helyen, ahol eltároltad a stringre mutató pointert szintén megfordul, illetve nem adhatsz be neki konstans stringet. Ha tehát úgy próbáltad ki pl. hogy megfordit(''abcde'') akkor az bizony segfault, mert a konstans string az nem írható, kivéve, ha erre külön kéred a fordítót (de ne tedd):
ha C kodot keszitek, akkor igyekszek olyat kesziteni, hogy az szepen simuljon a glibc-be, mert en altalaban ezt a C libet hasznalom. Szoval a fuggvenyem nem veletlenul vagy lustasagbol nem foglal helyet maganak, hanem azert, mert ez igy jobban hasznalhato, es szebben valasztja el a stringfordito viselkedest minden mastol, es igy tobb helyen fel lehet hasznalni, mint egy olyan fuggvenyt, ami maganak allokal teruletet. mindenfele C libek fejlesztoi is kifejezetten ugyelnek arra, hogy csak olyan fv foglaljon teruletet, aminek a funkcioja kifejezetten terulet allokalas, mint pl az atrdup(). persze nehany helyen meg kikerulhetetlen, hogy a lib foglaljon helyet nekunk, mert pl. valamilyen adatstrukturat kell feltoltenie, de ilyenkor a fuggveny definiciojaban szepen leirjakhogyha beleirsz halottvagy, es ami kell azt MASOLD ki, es utana szabaditsd fel az erre szolgalo fv.el. ha en allokalnek helyet, akkor konnyen elofordulhatna ilyen hiba:
str = megfordit (str); es rogton buktam nehany byteot, ami sosem jo. arrol az aprosagrol ne is beszeljunk hogy din. memoriafoglalas nem annyira gyors, mint inkabb lassu, nem minden rendszeren, es nem minden korulmenyek kozott erheto el, ha mar van 1 giga din.an foglalt memoriad linuxon pl mar konnyen lehet hogy elszall a progi meg ha 4 giga van is a masinaban. szoval egy fuggveny a leheto legkevesebb olyan muveletet vegezzen, aminek esetleg lehetnek mellekhatasai, es a leheto legkevesebb funkcionalitast valositsa meg, ami mar megfelel a specifikacionak. (szerintem)
u.i. elindexelesert sorry, elofordul nalam
-
NikhodemuS
csendes tag
válasz
Jester01
#174
üzenetére
Igy gondoltad?
char* megfordit(char *str)
{
int hossz=0,i = 0;
char* forditva;
while( *str++ ) ++hossz;
printf(''Checkpoint'');getch(); //ezt figyeld!
forditva=(char*)malloc(hossz+1);
while(!(str))forditva=str[hossz-i++];
forditva='\0';
str=forditva;
free(forditva);
return strcpy(str,forditva);
}
int main(void)
{char *sz,*szov; int i=0;
printf(''kerem a szoveget...'');
scanf(''%s'',&sz);
printf(''a szoveg:...%s'',&sz);
szov=(char*)malloc(strlen(sz));
printf(''forditva:...%s'',megfordit(szov));
getch();
return 0;
}
Itt valami nem tiszta...de koszi a joindulatot, remelem sikerul elmagyaraznotok, hol mind hibazok....
Aktív témák
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- RAM topik
- valakiyt: Az Iobit programok - el kéne engedni
- AMD Navi Radeon™ RX 9xxx sorozat
- PlayStation 5
- Építő/felújító topik
- A fociról könnyedén, egy baráti társaságban
- Posta, csomagküldés
- LEGO klub
- Xiaomi 15T - reakció nélkül nincs egyensúly
- További aktív témák...
- XPS 9640 16" FHD+ IPS Ultra 7 155H RTX 4050 16GB 1TB NVMe magyarított (lézerezett) vbill gar
- Dell Latitude 5430 üzleti laptop (14", i5, 16GB RAM, ÚJ 500GB SSD, 93% akku)
- Apple iPhone 13 Mini 128GB,Újszerű,Adatkabel,12 hónap garanciával
- Samsung Galaxy S25 256GB - Menta - Samsung.hu, Garanciális, Kártyafüggetlen
- Samsung Galaxy A56 5G Awesome Graphite 128GB használt karcmentes 6 hónap garancia
- Honor X7 128GB, Kártyafüggetlen, 1 Év Garanciával
- ÓRIÁSI AKCIÓK! GARANCIA, SZÁMLA - Windows 10 11, Office 2016 2019 2021,2024, vírusírtók, VPN
- White STRIX Gaming PC! 7800X3D / RTX 4080 Super / 48GB DDR5 / 1TB NVMe / 1000W Gold! BeszámítOK!
- Samsung PM9E1 "9100 PRO" 2TB M.2 NVME Gen5 x4 SSD! 14.000-12.500MB/s
- SONY PS4 PRO
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



