Kezdőoldal » Számítástechnika » Programozás » Kettő char pointer összekapcso...

Kettő char pointer összekapcsolása (c)?

Figyelt kérdés

[link]


Nem vagyok még teljesen tisztában a pointerekkel, bármilyen segítségnek örülnék,előre is köszönöm szépen :)



2016. nov. 1. 12:01
 1/6 anonim ***** válasza:
Mi a kérdés?
2016. nov. 1. 12:13
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Értelmezd szó szerint. Mutató. Vagyis olyan, mint egy nyíl, ami valahová mutat. Ha egyik pointert egyenlővé teszed a másikkal, akkor az is ugyanoda fog mutatni, mint egy nyíl.


(Hogy hová mutat, azt meg képzeld el úgy, mint egy kockás füzetlap. Minden kocka egy memóriaterület. A nyilak meg egy-egy kockára mutatnak.)

2016. nov. 1. 12:47
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:

A mutató egy memória terültre mutat, amibe írsz, és ahonnan olvasol. De ahhoz hogy létezzen memóriaterület ahova tudsz írni, először létre kell hozni azt. Erre jók az *alloc függvények.


Foglalj le először memóriát a szövegnek, mondd meg hogy arra a memóriaterületre mutasson a mutatód, majd utána tudod használni azt. Pl.:

char *str1 = malloc(50); //50 bájt memóriát foglalsz


Ha már nem használod, fel kell szabadítani a memóriát:

free(str1);

2016. nov. 1. 13:18
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:

Köszi a válaszokat, kezdem megérteni, de még a program nem működik :/ [link]

Eleje kis gyakorlás, pointer megértésére. Scanfel gondom van, nagyon nem akar összejönni a bekérés..

2016. nov. 1. 15:55
 5/6 anonim ***** válasza:

Az első sor bullshit:

char *str1=(char*)malloc(sizeof(int)*50);


Ne kimásold máshonnan hanem értsd meg. A (char*) nem kell az elejére mert a C szabvány megengedi az implicit konverziót void* típusról (nem baj ha ott van, de nem is szükséges). A sizeof(int) hülyeség, mert nem egy 50 méretű int tömböt akarsz, hanem egy 50 méretű char tömböt. De mivel a sizeof(char) definícióból adódóan mindig 1, nem kell kiírni.


Tehát helyesen:

char *str1 = malloc(50);

(ahogy azt már fentebb is írták)


Az első printf-nél a "&cp" és a "c" ugyan az, felesleges erre létrehozni egy cp-t.


A scanf hibás:

scanf("%s",&str1);

Argumentumként pointert vár az memóriaterületre ahova írni akarsz. A pointer a memóriaterületre nem a &str1 hanem a str1. Az &str1 a pointer arra a pointerre ami a memóriaterületre mutat. Helyesen:

scanf("%s", str1);


Nem keverendő a következővel:

int foo;

scanf("%d", &foo);


Itt a foo egy int, tehát a &foo lesz az int*, azaz a pointer ami a foo értékére mutat. A szöveg estében alapból azt tároljuk hogy a memóriában hol kezdődik a szöveg.

2016. nov. 1. 16:48
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Ahhh értem, ez nagyon kellett köszi! Most jó is lett, bár írtam egy kommentet mellé az értelmezésem szerint, remélem jól látom ott a dolgokat: [link]
2016. nov. 2. 14:36

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!