Problémy s přidáním int c do řetězce

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
alienhan
Začátečník
Začátečník
Uživatelský avatar
Registrován: 30. srp 2006

Problémy s přidáním int c do řetězce

Příspěvek od alienhan »

Zdravím,

už hodinu řeším problém s následujícím kódem:

Kód: Vybrat vše

char *string;
int c;
while((c = fgetc(f)) != '\n')
        {...
         ...
         ...
         //pridat c na konec string//
         ????
funkce má za úkol načítat řádek ze souboru a jakmile jsou splněné nějaké podmínky přidat načtený znak do řetězce. Jenže mě to nechce fungovat..

Kód: Vybrat vše

 string += (char)c;
poradíte, prosím?
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: Problémy s přidáním int c do řetězce

Příspěvek od arxeiss »

Proč mám takový dojem, že v C nejdou řetězce k sobě sčítat jako jsi to napsal, ale musí se použít funkce concat() ?
Někde jsem to četl, ale možná funguje i tvoje možnost, ale pak nevím kde máš chybu. C bereme ve škole, ale já raději C# takže se s Cčkem neženu individuálně dopředu...
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Trek
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. kvě 2008

Re: Problémy s přidáním int c do řetězce

Příspěvek od Trek »

Přesně tohle je ten důvod proč si myslím, že C by se nemělo učit pro začátečníky na školách, ale spíš Java nebo C# a principy objektovýho programování.

musí se použít itoa nebo něco podobnýho a pak strcat (mnemonická pomůcka je že to tam strkáš) nebo něco podobnýho za předpokladu, že se to do toho řetězce vejde (je alokovanej)
Maranov
Mírně pokročilý
Mírně pokročilý
Uživatelský avatar
Registrován: 21. črc 2006

Re: Problémy s přidáním int c do řetězce

Příspěvek od Maranov »

Budeš muset ten string alokovat (nejlépe) dynamicky, pomocí malloc(počet znaků + 1), resp. realloc(string, počet znaků + 1). A až ho nebude potřeba tak free(string).
Znak můžeš přilepit strcat().

Druhá možnost je vytvořit jej jako char string[počet znaků + 1], ale pak máš omezenou délku na to staticky alokované maximum.

Ideální je přidat nějaké počítadlo a třeba každých 16 znaků zavolat realloc a prodloužit string o dalších 16 znaků.
DESKTOP: C2D E8200 (pasivně); ATI HD 3870 (AC S1, 120 fan@5V); 4GB RAM; OCZ Vertex2 SSD 64GB; 320+320+250GB JBOD (odhlučněno); 2x FSC P19-2 (2056x1024)
MOBILE: Lenovo Thinkpad T420 4177 CTR, Crucial M4 SSD 128GB, 6GB RAM; FSC P19-2; Logitech G400
POCKET: Nokia Hulmia 800; Hitachi 500GB@Scythe Kamazo 2 (eSATA); Creative EP-630
AUDIO: Sennheiser HD 555 (foam mod), NuForce Icon µDAC, FLAC, ReplayGain, f2k

"A Man's mortality is a compass that points his way in life."
Odpovědět

Zpět na „Programování a web“