Függvénymutató átadása C-ben, hogyan?
Sziasztok!
Van egy stringes feladatom, a függvény neve:
char string(char c,int meret)
{
char* a;
a=malloc....
...
return a;
}
Ez a függvény megcsinál egy adott feladatot, de úgy, hogy közben dinamikus memóriafoglalást kell használnom, amit fel is kell szabadítani.
Ezt a függvényen belül nem tudom megtenni, csak a főprogramban, tehát át kéne adnom a függvény értéket, avgy mutatót, vagy nem is tudom mit, egy főprogrambeli mutatónak. És akkor ott meghívni valahogy a függvényt, kiíratni, és végül felszabadítani a főprogramban megadott mutatóval.
Tudnátok ebben segíteni? Hogy néz ki ez kódként?
Már valószínű a függvényemmel is baj van..mármint hogy más visszatérési érték kéne, illetve nem vagyok benne biztos, hogy a-val kéne visszatérni.
Illetve gondolom ezt kéen használni: &
Csak nem tudom hogyan. :/
Előre is köszönöm a segítséget.





Lehet fv-t hívni pointerrel, de azt nem ilyen esetben szokás alkalmazni, hanem pl. valamilyen kommunikációs protokoll esetén, amikor sok függvény van, és a megfelelőt kell hívni a bejövő üzenetekre. Ekkor egy táblázatban lehet inicializálni a függvényekre mutató pointereket.
De mi is a feladat tkp? Mert itt a visszatérési érték egy karakterre mutató pointer lesz, aminek le lett foglalva hely, de nem lett felszabadítva.
Az a feladat, hogy a lefoglalt memóriaterületet felszabadítsam. Ezzel van a bajom, hogy nem tudom hogyan kéne megoldanom.
A függvényen belül nem szabadíthatom fel, a főprogramban pedig ha beírom, hogy free(a), akkor azzal nem tud mit kezdeni, hiszen nincsen deklarálva az "a" a főprogramban. Tehát valahogy át kéne adnom a függvényt a főprogrambeli változónak/mutatónak, hogy aztán azáltal felszabadíthassam.
De ha tudsz ennél egyszerűbb megoldást is, akkor azt is köszönöm. :) Mindenesetre én ezt így tudtam elképzeéni.





Ha csak ennyi, akkor mondjuk így: :)
char string(char c,int meret)
{
char* a;
char* b;
a=malloc....
...
b=a;
free(a);
return b;
}





Illetve ez se jó, mert mit akarunk kezdeni egy pointerrel, ami egy felszabadított memóriaterületre mutat?
Ezért kérdeztem, hogy pontosan mi is a feladat.










Akkor a fv. visszatérési értéke is pointer, ezért ilyen:
char* string(char c,int meret)
{
char* a;
a=malloc....
...
return a;
}
main()
{
char* b;
b=string('x', 5);
...
free(b);
...
}
Szerintem működik így, bár 100%-ig nem vagyok biztos.
Köszi, működik!! :)
Már csak egyetlen bajom van..valamiért nem írja ki a betűt, hanem 8asokat, pedig %c-vel írattam ki. Tudod esetleg, hogy mi lehet a baj?





Szerintem %s-sel kell.
%c egy karaktert ír csak ki, de ha pointert adsz neki, akkor annak az alsó byte-ját.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!