Kezdőoldal » Számítástechnika » Programozás » Hogyan tudok egy előre nem...

Hogyan tudok egy előre nem ismert hosszúságú karaktersorozatot beolvasni, majd egy, a string hosszának megfelelően dinamikusan foglalt méretű tömbben eltárolni C nyelvben?

Figyelt kérdés
2011. nov. 8. 15:51
 1/7 anonim ***** válasza:
Egy lehetséges megoldás, amit írtam: [link]
2011. nov. 8. 16:50
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
Sajnos a malloc-os függvényekből még lenne mit átnéznem, ha az inputot egy scanf-től kapná, akkor hogy nézne ki a program?
2011. nov. 8. 17:40
 3/7 anonim ***** válasza:

"ha az inputot egy scanf-től kapná, akkor hogy nézne ki a program?"

A scanf-nek előre lefoglalt memóriaterületen lévő string memóriacímét lehet átadni.(Statikusan vagy dinamikusan foglalt.) A scanf nem fog új memóriát foglalni, ha kevés volt a lefoglalt memória akkor leállhat a program tömbtúlcsordulás hibával, vagy akár elég furcsán visselkedhet ha nem lép át memóriaszegmenst.


A scanf-nek előre lefoglalsz annyi memóriát dinamikusan, amennyit soha nem léphet túl a beolvasott string, a végén a realloc-al korrigálod hogy épp annyi legyen mint a string mérete. Akkor fog helyesen működni ha tényleg nem adsz meg hosszabb string-et mint amennyit feltételeztél hogy nem léphet túl és persze van annyi lefoglaltató memória, míg az előző példánál megadhadsz szinte bármekkora string-et.

[link]

Itt feltételezem hogy 30000-1 azaz 29999 karakternél nem adsz meg hosszabb string-et. Lehet hogy irreálisnak tűnik hogy ilyen előfordul ennél hosszabb input, de legyen legalább valami fogalmunk a szoftverhelyességről.


Mj: Az előző példában elnézést a helyesírási hibákért és illett volna meghívni a free függvény-t ha használom a malloc-ot.

A scanf helyett ajánlott saját beolvasó függvényt írni ilyen esetre és azt használni és nem foglalkozni vele hogy hogy működik csak azzal hogy mit csinál. Az előző példában könnyen be lehet rakni egy saját string beolvasó függvénybe.

2011. nov. 8. 18:36
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

realloc(s,strlen(s)+1);

gondolom a realloc az beállítja a sztring méretét

a zárójelben az 's' az hogy annak a sztringnek kell

az strlen adja meg a méretet a sztring nek mármint ez veszi ki hogy mekkora is igazából a +1 meg kell mivel le kell zárni a sztringet vagy mi

Jól gondolom??

2011. nov. 8. 19:08
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

"gondolom a realloc az beállítja a sztring méretét"

A realloc megváltoztatja a lefoglalt memória méretét.

A lefoglalt memória mérete lehet több, de legalább akkorának kell lennie mint a string hossza a végjellel együtt.

"az strlen adja meg a méretet a sztring nek mármint ez veszi ki hogy mekkora is igazából a +1 meg kell mivel le kell zárni a sztringet vagy mi "

Az strlen a string hosszát adja meg. +1 a string vége után van egy zero byte ami a végét jelenti a string-nek.

2011. nov. 9. 15:32
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
de szar ez a scanf :D
2011. nov. 9. 16:48
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

15:32

köszi szépen akkor jól gondoltam.

2011. nov. 9. 20:38
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!