Kettő char pointer összekapcsolása (c)?
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 :)
É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.)
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);
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..
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!