Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [fstream][C++] problem z tworzeniem pliku
toaspzoo
post 11.05.2011, 21:03:40
Post #1





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Witam, mam taki kod do tworzenia pliczków....
Chciałbym, żeby te pliki coś ważyły, np. każdy po 1MB

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.  
  10.  
  11.  
  12. string nazwa;
  13.  
  14. int i;
  15.  
  16. for(i=0;i<500;i++)
  17. {
  18. nazwa = i;
  19.  
  20. fstream strumien_zapisu;
  21. strumien_zapisu.open(nazwa.c_str() ,ios::out);
  22.  
  23. }
  24.  
  25.  
  26. }


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
1010
post 11.05.2011, 22:14:43
Post #2





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


Czy ten temat pasuje do tematyki forum?


--------------------
Go to the top of the page
+Quote Post
nasty
post 12.05.2011, 03:28:15
Post #3





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Kod
#include <fstream>

void main()
{
    char temp_buff[4 /* <- tu ilość cyfr w liczbie plików + 1 (na NULL-a) */];    
    size_t advance_pos = (1024* 1024) - 1;
    for(int i = 500; i; --i) {
        _itoa_s(i, temp_buff, _countof(temp_buff), 10);
        std::ofstream out(temp_buff, std::ios::out);
        out.seekp(advance_pos);
        out.put(NULL);
        out.close();
    }
}
Go to the top of the page
+Quote Post
toaspzoo
post 12.05.2011, 09:22:36
Post #4





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Dzięki sprawdze
@up to jest hydepark!


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
toaspzoo
post 12.05.2011, 14:36:51
Post #5





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Ale wywala błąd
Kod
10 C:\Documents and Settings\P4\Pulpit\virus.cpp `_countof' cannot be used as a function


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
nasty
post 13.05.2011, 10:10:10
Post #6





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Jakiego kompilatora używasz?
To jest makro w visual c++, możesz jednak sobie je sam zdefiniować:

Kod
#define _countof(ar) (sizeof(ar)/sizeof(ar[0]))
Go to the top of the page
+Quote Post
toaspzoo
post 13.05.2011, 21:20:16
Post #7





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Teraz wywala to:

Kod
`_itoa_s' undeclared (first use this function)


używam dev c++

Ten post edytował toaspzoo 14.05.2011, 20:37:21


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
Speedy
post 14.05.2011, 15:56:30
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Lol - virus.cpp. Człowieku, daj spokój wink.gif. Najpierw poznaj podstawy i się angielskiego naucz, a potem się bierz za wirusy. Podejrzewam, że _itoa_s jest jakąś wbudowaną funkcją kompilatora w Visual Studio. Dev C++ standardowo korzysta z g++, więc jak nie załączałeś żadnej dodatkowej biblioteki, to tam takiej funkcji pewnie nie ma. Z tego, co pamiętam, to bibliotece standardowej jest taka funkcja itoa i to pewnie o nią chodzi, więc sobie popraw nazwy.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
nasty
post 14.05.2011, 20:36:18
Post #9





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


_itoa_s jest bezpieczną wersją _itoa, która pozwala zapobiedz problemom z przepełnieniem buffora - tak zwane stack overflow. Jest ona częścią Visual C++ Runtime.
Ogólnie to polecam używanie tych bezpiecznych wersji zamiast zwykłych, szczególnie jak nie jesteś jeszcze doświadczony w C/C++ i nie wiesz jak obchodzić się z pamięcią.
Żeby używać tych bezpiecznych wersji, podmień kompilator w swoim edytorze na VC++ albo użyj darmowego Visual C++ 2010 Express.
Go to the top of the page
+Quote Post
toaspzoo
post 14.05.2011, 20:39:19
Post #10





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Cytat
Lol - virus.cpp. Człowieku, daj spokój


Virus, nazwałem go tak, bo mój młodszy brat chciał wink.gif
A co do angielskiego, to powiem Ci, że nawet nieźle mi idzie, w tamtym roku zdawałem egzamin FCE wink.gif
Mam 15 lat wink.gif


Uups... too many emoticons ;D

Ten post edytował toaspzoo 14.05.2011, 20:40:40


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
nasty
post 14.05.2011, 20:47:46
Post #11





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat(Speedy @ 14.05.2011, 15:56:30 ) *
Lol - virus.cpp. Człowieku, daj spokój wink.gif. Najpierw poznaj podstawy i się angielskiego naucz, a potem się bierz za wirusy. Podejrzewam, że _itoa_s jest jakąś wbudowaną funkcją kompilatora w Visual Studio. Dev C++ standardowo korzysta z g++, więc jak nie załączałeś żadnej dodatkowej biblioteki, to tam takiej funkcji pewnie nie ma. Z tego, co pamiętam, to bibliotece standardowej jest taka funkcja itoa i to pewnie o nią chodzi, więc sobie popraw nazwy.

A jak ma poznać podstawy inaczej niż eksperymentująć? ;-)
Ciężko wymagać od 15stolatka wiedzy która pozwala na napisanie "poważnego" wirusa.

Sam zaczynałem od tego i moim pierwszym programem też był "wirus", z tym, że ja zanim nie męczyłem innych to najpierw sam szukałem odpowiedzi i nie traktowałem forum w internecie jako wyszukiwarka Google czy indeks w książce (za moich czasów ;P).

Ten post edytował nasty 14.05.2011, 20:49:19
Go to the top of the page
+Quote Post
toaspzoo
post 15.05.2011, 13:18:21
Post #12





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Początkowo szukałem w google, ale nie znalazłem satysfakcjonującego mnie przykładu ;


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
Speedy
post 15.05.2011, 18:22:45
Post #13





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Cytat(toaspzoo @ 14.05.2011, 21:39:19 ) *
Virus, nazwałem go tak, bo mój młodszy brat chciał wink.gif
A co do angielskiego, to powiem Ci, że nawet nieźle mi idzie, w tamtym roku zdawałem egzamin FCE wink.gif
Mam 15 lat wink.gif


Uups... too many emoticons ;D


Okej. Skąd mogłem wiedzieć, ile masz lat wink.gif. Ja w wieku ok. 14 lub 15 lat pierwszy komputer dostałem. W kwestii angielskiego miałem na myśli to:

Cytat
Kod
`_itoa_s' undeclared (first use this function)


Masz wyraźnie napisane, że funkcja _itoa_s jest niezdeklarowana, dlatego Twój program nie chce się skompilować. Jeżeli zdałeś FCE, to powinieneś to zdanie zrozumieć wink.gif.

W devie, a raczej w g++ taki kod się skompiluje, choć wywali jakieś warningi.
Jedyne, co zrobiłem, to zamieniłem _itoa_s na itoa, zwracany typ danych funkcji main z void na int i dodałem return, bo z voidem w g++ się nie skompiluje.

Kod
#include <fstream>
#define _countof(ar) (sizeof(ar)/sizeof(ar[0]))

int main()
{
    char temp_buff[4 /* <- tu ilość cyfr w liczbie plików + 1 (na NULL-a) */];
    size_t advance_pos = (1024* 1024) - 1;
    for(int i = 500; i; --i) {
        itoa(i, temp_buff, _countof(temp_buff));
        std::ofstream out(temp_buff, std::ios::out);
        out.seekp(advance_pos);
        out.put(NULL);
        out.close();
    }
    return 0;
}


Ten post edytował Speedy 15.05.2011, 18:25:19


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
nasty
post 15.05.2011, 19:19:02
Post #14





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Speedy - źle.
Ostatni parametr w itoa to nie jest rozmiar bufora a podstawa alfabetu liczby. http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

Powinno być tak:

Kod
itoa(i, temp_buff, 10)
Go to the top of the page
+Quote Post
Speedy
post 16.05.2011, 00:24:36
Post #15





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Rzeczywiście. Chciałem sprawdzić na szybko, czy działa, a nie pamiętałem dokładnie składni funkcji itoa, która przyjmuje o 1 parametr mniej, niż _itoa_s.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 02:36