Strona 1 z 1
[C++] [SOLVED] getch() - wczytuje śmieci
: 14 gru 2010, 04:53
autor: falik
Witam, więc mój problem polega na tym że gdy wczytuje sobie za pomocą getch() do stringa to przy jego wypisaniu pojawiają mi się w nim dodatkowe znaki np. ^V, ^R itp.
Podejrzewam że jest tutaj coś nie tak z odczytywaniem niektórych znaków ale nie mam pojęcia jak temu zaradzić.
Przy inicjalizacji ncurses próbowałem właściwie wszystkich już kombinacji trybu wyświetlanie ale nie dało to żadnych efektów. Muszę dostawać w tym stringu czysty tekst pobrany od użytkownika bo wykorzystuję go później jakos nazwe pliku który otwieram no i przez te znaki mi wszystko sie sypie.
Ktoś ma jakiś pomysł ?
Odp: [C++] getch() - problem z odpowiednim wczytywaniem
: 14 gru 2010, 07:04
autor: ethanak
falik pisze:Ktoś ma jakiś pomysł ?
Rzuć kawałkiem kodu, bo dyżurna wróżka ma akurat urlop

Odp: [C++] getch() - wczytuje śmieci
: 14 gru 2010, 15:11
autor: falik
Kod: Zaznacz cały
// to jest funkcja pobierajaca stringa od uzytkownika
std::string read_filename()
{
clear();
mvprintw(5,5,"Wpisz nazwe pliku:\n");
refresh();
std::string tab;
std::string::iterator it;
it=tab.begin();
char z=getch();
int i=0;
while(z!='\n')
{
*(it+i)=z;
z=getch();
i++;
}
return tab;
}
// tutaj wrzucam to do vectora
buffer.push_back(read_filename());
// a tu wyswietlam ( wiem ze tylko pierwszy el. ale nie zrobilem jeszcze petli, to tylko dla sprawdzenia czy dobrze zapisywane mam dane
void print()
{
clear();
bit=buffer.begin();
std::string d1 = *(bit);
mvprintw(2,2,d1.c_str());
refresh();
}
Oczywiscie w glownym module programu wywoluje sobie te funkcje w odpowiednim momencie itp. Nie bede kopiowal przeciez tutaj tresci 5 plikow. Mysle ze to co wrzucilem to chyba wszystko co ma zwiazek z tym getch()
Odp: [C++] getch() - wczytuje śmieci
: 14 gru 2010, 16:01
autor: dawwin
Wychodzisz tutaj poza ciąg znaków, który tak na dobrą sprawę jest pusty
Powinno być po prostu
Odp: [C++] getch() - wczytuje śmieci
: 14 gru 2010, 16:09
autor: falik
Dzięki dzięki. Tak się składa, że udało mi się samemu dojść już do tego. Tylko nie rozumiem jeszcze do końca dlaczego iterator działa w pewnym sensie bo mimo wszystko wpisuje mi znaki do stringa tylko na końsu jakby dodaje jeszcze element ze śmieciem
Odp: [C++] getch() - wczytuje śmieci
: 14 gru 2010, 16:18
autor: dawwin
String realokuje sobie pamięć na znaki, kiedy używasz któregoś z operatorów przypisania lub jakiejś metody (funkcji) tej klasy. Używając iteratora masz dostęp do zaalokowanych już znaków, ale nie możesz zmienić rozmiaru ciągu. Więc jeśli masz w stringu 10 znaków to te 10 możesz nadpisać. Ciąg znaków w pamięci kończy się znakiem '\0', gdyż klasa string przechowuje w tablicy ciąg typu char (Jeśli pisałeś kiedyś w C to powinieneś to wiedzieć). Ty używając iteratora możesz zamazać znak końca i wtedy na końcu pojawiają się śmieci
Odp: [C++] getch() - wczytuje śmieci
: 14 gru 2010, 16:26
autor: falik
Ok rozumiem już, dzięki za wytłumaczenie. Dopiero zagłębiam się w stringi i vectory także sporo błędów mi wyskakuje, których nie rozumiem. Myślę, że teraz już wiem o co chodzi.
Temat chyba do zamknięcia. SOLVED