Kezdőoldal » Számítástechnika » Programozás » Hogy tudok C-ben dinamikus...

Hogy tudok C-ben dinamikus memóriaméretű sztringet csinálni anélkül, hogy előre tudnám a méretet?

Figyelt kérdés

A feladat a következő: A program kérje be a felhasználó nevét. A név sztring mérete akkora legyen, amennyi karaktert beír a felhasználó. Ennek ugye nyilván az az értelme, hogy ne foglaljunk feleslegesen sok memóriát előre.


Viszont anélkül, hogy csinálnék egy sztringet, és abba beolvasnám a nevet, annak megnézném a hosszát, és ezt a hosszot adnám a malloc()-ba, nem tudom hogy lehetne. Így meg elveszne a dinamikus foglalás lényege...



2012. nov. 19. 17:18
 1/6 iostream ***** válasza:
Hát, azt meg tudod csinálni, hogy karakterenként olvasol, és reallocolsz. De ez nagyon barbár megoldás lenne.
2012. nov. 19. 18:12
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
Láncolt listával kell megvalósítanod a stringet. Persze akkor egy UTF8-as string karakterenként egy pointer + 4 byte méretet fog felvenni. (Ami általában 6 vagy 8 byte)
2012. nov. 20. 20:03
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
Bocsánat: az UTF8 az 1 byte + mutató méretet vesz fel. Az UTF16 az pedig csak 4 vagy 6 byte. Elszámoltam magam. Szóval annyira nem durva a helyzet.
2012. nov. 20. 20:04
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
És azt is megteheted, hogy mondjuk egy láncszemben több, pl: 8 karaktert tárolsz el. Ez akkor optimális, ha hosszabb stringjeid vannak. Így a hosszabb stringek kevesebb memóriát fognak foglalni, hiszen nem tartozik egy mutató minden külön karakterhez. Viszont a műveletvégzés bonyolultabb.
2012. nov. 20. 20:06
Hasznos számodra ez a válasz?
 5/6 iostream ***** válasza:

"Láncolt listával kell megvalósítanod a stringet. Persze akkor egy UTF8-as string karakterenként egy pointer + 4 byte méretet fog felvenni. (Ami általában 6 vagy 8 byte)"

"Bocsánat: az UTF8 az 1 byte + mutató méretet vesz fel. Az UTF16 az pedig csak 4 vagy 6 byte. Elszámoltam magam. Szóval annyira nem durva a helyzet."


Uhh. Az UTF8-as karakter NEM 1 byte, hanem LEGALÁBB egy, illetve az UTF16 ugyanez, csak legalább 2 byte.


A feladatkiírás az, hogy ne foglaljunk feleslegesen memóriát. Ezt egy láncolt adatszerkezet arcon köpi, és az is, ha nagyobb blokkonként foglalod a memóriát.

2012. nov. 20. 21:12
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

Világos, én 1 byte-os karakterekkel számoltam (ASCII karakterek). Nyilván ha több bájtos a karakter, akkor mindegyikhez külön adódik hozzá a mutató. Ez arányos a sima bufferrel, hiszen ott is, mint itt, ha 2-ször annyi byte-ból áll a sorozat, 2x akkora lesz a szükséges tárterület.


Egyébként a feladatkiírást, ha alaposabban elolvasnád, pont azt szerepelt, hogy ne foglaljunk le feleslegesen sok memóriát ELŐRE. Vagyis nem az, hogy minél kevesebb memóriát haszánljunk, hanem az, hogy ne legyen lefoglalt, de üresen hagyott terület. Szerintem ez a feladatkiírás pont a láncolt listák megvalósítására illeszkedik, de a realloc megoldás is pontosan megfelel. Ha mondjuk sok műveletet is kellene velük végezni, akkor gondolkodás nélkül láncolt listákat javasolnék. (Bár ugye attól függ, milyen műveletet...)

2012. nov. 20. 21:23
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!