Aktív témák
-
Jester01
veterán
Én csak azt mondtam, hogy vigyázni kell vele, nem azt, hogy rossz

Kezdõként szerintem könnyû belefutni abba a két problémába amit említettem.
Nekem spec. egy olyan függvény ami visszaad egy char*-ot azt sugallja, hogy új stringet kapok (értelemszerûen ha olyan függvényrõl van szó, ami módosít). De ez csak az én hülyeségem. Igen, tudom, hogy a c libben is több ilyen van. Nyilván ha az ember elolvassa a dokumentációt akkor egyértelmû hogyan kell használni az adott függvényt. -
Jester01
veterán
válasz
NikhodemuS
#175
üzenetére
Nem

Igy:strcpy(str, forditva);
free(forditva);
return str;
A main-be pedig ilyesmit:char sz[81];
...
scanf(''%80s'', sz);
printf(''a szoveg: %s\n'', sz);
MOD: az sz-t persze malloc-cal is foglalhatod, de mindenképp a scanf elõtt, mert az akar beleírni. A szov változóra nincs szükség.
[Szerkesztve] -
Jester01
veterán
válasz
NikhodemuS
#173
üzenetére
Mindjárt jobban látjuk a hibát.
Sajnos a bekért stringnek is kell hely és azt is neked kell lefoglalni.
Valamint a scanf és a printf hívásban nem &sz kell hanem simán sz.
Az ideiglenes stringet (forditva) az strcpy után felszabadíthatod, nem törlõdik automatikusan.
MOD: A printf nem tesz soremelést automatikusan, neked kell \n formában.
[Szerkesztve] -
Jester01
veterán
válasz
NikhodemuS
#167
üzenetére
Esetleg ha az egész programot megmutadnád. Jellemzõen ilyenkor máshol van a hiba

Ha az eredeti kódodba beszúrod a malloc-ot amit én írtam, akkor sem jó?
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):
-fwritable-strings
Store string constants in the writable data segment and don't uniquize them. This is for compatibility with old programs which assume they can write into string constants.
Writing into string constants is a very bad idea; ``constants'' should be constant. -
Jester01
veterán
válasz
NikhodemuS
#157
üzenetére
A forditott szövegnek nem foglalsz helyet. Ezt c-ben neked kell. És persze fel is kell szabadítani, ha már nincs rá szükség:
forditva = (char*)malloc(hossz + 1); /* a lezáró nulla bytenak is kell hely */
Egyébként egy string hosszát az strlen() függvénnyel le lehet kérdezni.
VladimirR: Köszi a bányászást, így már mindjárt más.
MOD: Ugyanakkor a dõlt betû megint továbbterjed a következõ hozzászólásra. Azt hittem ez már javítva
[Szerkesztve]
Aktív témák
- Samsung Galaxy S25 Edge 256GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 15 Plus 128GB, Kártyafüggetlen, 1 Év Garanciával
- HP EliteDesk 705 G4 / AMD Ryzen 3 Pro 2200G / 16GB DDR4 /256 GB SSD 6 hó garancia
- 2017 iMac 27" 5K Retina, 16gb ddr4,250gb ssd, Radeon Pro 570 4 GB dedikált
- Xbox One S Minecraft Edition 1 TB + kontroller 6 hó garancia, számlával!
- HP EliteBook 640 G11 Core Ultra 5 125U 32GB 1TB FHD 1 év gar
- Apple iMac 24" Blue! M3 / 16GB RAM / 512GB SSD!
- HP ProBook 650 G5 - i5 8265U, 8-16GB RAM, SSD, jó akku, számla, 6 hó gar
- Akciós!! Előbb mint bárhol máshol !! Motorola Moto G77 8GB/256GB - 1 év garancia
- 217 - Lenovo Legion 7 (16IRX9) - Intel Core i7-14700HX, RTX 4060
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


![;]](http://cdn.rios.hu/dl/s/v1.gif)

