Kezdőoldal » Számítástechnika » Programozás » Függvénymutató átadása C-ben,...

Függvénymutató átadása C-ben, hogyan?

Figyelt kérdés

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.


2013. márc. 1. 08:45
 1/9 anonim ***** válasza:

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.

2013. márc. 1. 09:14
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

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.

2013. márc. 1. 09:33
 3/9 anonim ***** válasza:

Ha csak ennyi, akkor mondjuk így: :)


char string(char c,int meret)

{

char* a;

char* b;

a=malloc....

...

b=a;

free(a);

return b;

}

2013. márc. 1. 09:35
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:

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.

2013. márc. 1. 09:37
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:
Vagy mondjuk tedd ki a char* a-t globális változóba, akkor lehet malloc a fv-ben és free a főprogramban. De akkor nem kell visszatérési érték sem.
2013. márc. 1. 09:40
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:
Írjon függvényt mely paraméteréül kap egy karaktert (c) és egy számot (n-nekem ez a méret:)), visszatérési értékül pedig egy null terminált sztring mutatóját adja, mely sztring n-szer tartalmazza a c karaktert!
2013. márc. 1. 09:42
 7/9 anonim ***** válasza:
100%

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.

2013. márc. 1. 10:07
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:

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?

2013. márc. 1. 10:23
 9/9 anonim ***** válasza:

Szerintem %s-sel kell.

%c egy karaktert ír csak ki, de ha pointert adsz neki, akkor annak az alsó byte-ját.

2013. márc. 1. 10:50
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!