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?
"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.
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.
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??
"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.
15:32
köszi szépen akkor jól gondoltam.
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!