Drukowana wersja tematu
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
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
string nazwa;
int i;
for(i=0;i<500;i++)
{
nazwa = i;
fstream strumien_zapisu;
strumien_zapisu.open(nazwa.c_str() ,ios::out);
}
}
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
. 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](http://forum.php.pl/style_emoticons/default/wink.gif)
A co do
angielskiego, to powiem Ci, że nawet nieźle mi idzie, w tamtym roku zdawałem egzamin FCE
![wink.gif](http://forum.php.pl/style_emoticons/default/wink.gif)
Mam 15 lat
![wink.gif](http://forum.php.pl/style_emoticons/default/wink.gif)
Uups... too many emoticons ;D
Napisany przez: nasty 14.05.2011, 20:47:46
Cytat(Speedy @ 14.05.2011, 15:56:30 )
![*](http://forum.php.pl/style_images/upgrade_ip/post_snapback.gif)
Lol -
virus.cpp. Człowieku, daj spokój
![wink.gif](http://forum.php.pl/style_emoticons/default/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 )
![*](http://forum.php.pl/style_images/upgrade_ip/post_snapback.gif)
Virus, nazwałem go tak, bo mój młodszy brat chciał
![wink.gif](http://forum.php.pl/style_emoticons/default/wink.gif)
A co do
angielskiego, to powiem Ci, że nawet nieźle mi idzie, w tamtym roku zdawałem egzamin FCE
![wink.gif](http://forum.php.pl/style_emoticons/default/wink.gif)
Mam 15 lat
![wink.gif](http://forum.php.pl/style_emoticons/default/wink.gif)
Uups... too many emoticons ;D
Okej. Skąd mogłem wiedzieć, ile masz lat
![wink.gif](http://forum.php.pl/style_emoticons/default/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](http://forum.php.pl/style_emoticons/default/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)