Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Hydepark _ [fstream][C++] problem z tworzeniem pliku

Napisany przez: toaspzoo 11.05.2011, 21:03:40

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. }

Napisany przez: 1010 11.05.2011, 22:14:43

Czy ten temat pasuje do tematyki forum?

Napisany przez: nasty 12.05.2011, 03:28:15

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();
    }
}

Napisany przez: toaspzoo 12.05.2011, 09:22:36

Dzięki sprawdze
@up to jest hydepark!

Napisany przez: toaspzoo 12.05.2011, 14:36:51

Ale wywala błąd

Kod
10 C:\Documents and Settings\P4\Pulpit\virus.cpp `_countof' cannot be used as a function

Napisany przez: nasty 13.05.2011, 10:10:10

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]))

Napisany przez: toaspzoo 13.05.2011, 21:20:16

Teraz wywala to:

Kod
`_itoa_s' undeclared (first use this function)


używam dev c++

Napisany przez: 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.

Napisany przez: nasty 14.05.2011, 20:36:18

http://msdn.microsoft.com/en-us/library/0we9x30h(v=VS.100).aspx jest bezpieczną wersją _itoa, która pozwala zapobiedz problemom z przepełnieniem buffora - tak zwane stack overflow. Jest ona częścią http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84.
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 http://www.microsoft.com/express/Downloads/#2010-Visual-CPP.

Napisany przez: toaspzoo 14.05.2011, 20:39:19

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

Napisany przez: nasty 14.05.2011, 20:47:46

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).

Napisany przez: toaspzoo 15.05.2011, 13:18:21

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

Napisany przez: Speedy 15.05.2011, 18:22:45

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;
}

Napisany przez: nasty 15.05.2011, 19:19:02

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)

Napisany przez: Speedy 16.05.2011, 00:24:36

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)