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 |