pekfos |
» 2013-11-24 18:16:08 | Skoro to ma tak wyglądać to powiedz mi czemu to działa :P |
Zapewne kompilator wygenerował kod zerujący tablicę (tryb debug?), przez co masz zero po wczytanych danych. Jeśli plik będzie miał ponad 1023 bajty, to już zobaczysz krzaki. | Czy to jest jakiś karygodny błąd przez, który aplikacja może się sypnąć czy coś w tym rodzaju ? |
Tak. |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-11-24 18:19:19 Czyli ta jedna linijka robi tak wielką różnice :P memset( bufor, '*', 1024 ); A mogę zadać pytanie co ta jedna linijka robi :) ? PS: Jak odpowiesz to temat do zamknięcia, bo problem rozwiązany. PS2: Ejjj... ta jedna linijka psuje program :P Ona dodaje w cholerę gwiazdek po wczytanym tekście :P |
|
Buby |
» 2013-11-24 18:24:32 Chodzi o to, że tablica ma mieć miejsce na NULLA '/0'. Na końcu każdej tablicy znaków czy też stringa znajduje się null. Przykładowo wiele funkcji sprawdzających lub operujących na wyrazach działa dopóki nie napotka nulla. Więc jeśli do tablicy char[1024] wczytasz 1024 znaki, to zabraknie Ci miejsca na NULL. Wtedy mogą nastąpić trudne do wykrycia błędy lub pisanie po pamięci. Co skutkuje napisem 'Nastąpił błąd, aplikacja zostanie zamknięta'. @Edit, a funkcja memset() wypełnia tyle miejsc tablicy ile masz w trzecim argumencie takim znakiem, jaki jest w drugim argumencie. Pierwszym jest tablica znaków. Wg. mnie pekfos chciał zapełnić tablicę, przed wprowadzeniem danych. @ Zdziwiony, a spróbuj zapisać w pliku tekstowym 2000 znaków i zobacz, czy program zadziała. |
|
pekfos |
» 2013-11-24 18:28:45 | A mogę zadać pytanie co ta jedna linijka robi :) ? |
Wypełnia bufor gwiazdkami. | PS2: Ejjj... ta jedna linijka psuje program :P Ona dodaje w cholerę gwiazdek po wczytanym tekście :P |
O to chodziło w przykładzie. |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-11-24 18:28:53 No chyba, że tak ;) Jeszcze jedno pytanko, jak zapisać tę linijkę: memset( bufor, '*', 1024 ); Żeby nie dodawała mi kilkudziesięciu gwiazdek do tekstu! :P |
|
MrPoxipol |
» 2013-11-24 18:29:39 |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-11-24 18:33:23 Przy takim kodzie: if( plik2.good() == true ) { std::cout << "Plik zostal otwarty pomyslnie!\nJego zawartosc zostala zaladowana ponizej:\n" << std::endl; char bufor[ 1024 ]; plik2.read( bufor, 1024 ); cout << bufor; cout << "\n"; } else std::cout << "Wystapil blad! Nie mozna otworzyc pliku!" << std::endl;
} system( "pause" ); Wypełniłem plik trzema tysiącami znaków i zadziałał, z tym, że zostało wczytanych do programu ich mniej (nie liczyłem ile, ale przypuszczam, że jak zmienie wartość 1024 na więcej wyświetli się więcej) EDIT: Zwiększyłem to 1024 na 2000 i wczytało się więcej tekstu, a wszystko działa OK. |
|
Buby |
» 2013-11-24 18:36:43 Jaki z tego wniosek? - wczytuj tekst do stringa za pomocą getline. Unikniesz niebezpieczeństwa i zawsze wczytasz cały plik :) |
|
| 1 2 « 3 » 4 |