terminalovy textovy editor c++

Programovacie jazyky, rady, poradňa...
solskier
Amateur
Amateur
Príspevky: 18
Registrovaný: 09 feb 2012, 21:59

terminalovy textovy editor c++

Príspevok od používateľa solskier »

Dobry den mam problem s tym ze ak napisem do programu nejaku vetu tak mi zoberie iba prve slovo a to v pripade ak pouzijem string tomu rozumiem len potom neviem ako mam alokovat pamat pre char alebo je aj ine riesenie ?

Kód: Vybrať všetko

#include <vector>
#include <iostream>
#include <cstring>

 using namespace std;

main()
{


char * pole = new char[1];



// zvetseni

char *nove_pole = new char[1024]; // alokovat nove ople o potrebne velikosti

memcpy(nove_pole, pole, sizeof(char)*1024); // zkopirovat

delete [] pole; // smazat stare

pole = nove_pole; // pole bude ukazovat na nove aloovanz blok pameti

cin >> pole;

cout << pole << endl;


return 0;
}
toto je ustrizok kodu no dynamicke alokovanie pamate je pre mna ako spanielska dedina co robim zle ?
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: terminalovy textovy editor c++

Príspevok od používateľa metthal »

No takze podme postupne

1. Neviem co ma nazov temy spolocne s jej obsahom
2. Chyba ti navratovy typ "int" pri main() funkcii, cize zapis by mal vyzerat takto

Kód: Vybrať všetko

int main()
3. Kopirujes pamat, ktoru si si nealokoval. Zoberies tvoje stare pole a snazis sa nakopirovat 1024 bajtov do noveho pola. Ty si si vsak alokoval stare pole len o velkosti 1 bajt.
4. Na nacitanie celeho riadku do bufferu pouzivaj cin.getline(pole, 1024);
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: terminalovy textovy editor c++

Príspevok od používateľa BX »

Kód: Vybrať všetko

char * pole = new char[1];
char *nove_pole = new char[1024]; // alokovat nove ople o potrebne velikosti
memcpy(nove_pole, pole, sizeof(char)*1024); // zkopirovat
delete [] pole; // smazat stare
pole = nove_pole; // pole bude ukazovat na nove aloovanz blok pameti
Si si vedomý, čo tu vlastne robíš? Veď to nemá zmysel.
1.) Alokujem si pamäť
2.) Alokujem si väčšiu pamäť
3.) Skopírujem si menšiu do väčšej, aj keď v nej nič nemám
4.) Menšiu si zmažem, lebo chcem len väčšiu.

Tieto štyri body sa dajú skrátiť do jedného:
1.) Alokujem si väčšiu pamäť.

Naozaj neviem, ako ťa napadlo robiť niečo takéto.
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: terminalovy textovy editor c++

Príspevok od používateľa metthal »

Mozno sa len snazi naucit ako funguje dynamicka alokacia. Prakticky to vsak zlyhava.
Napísať odpoveď