c++ (vs2010) Вопрос: как реализовать алгоритм брутфорса ? Т.е. необходимо найти ключ из 6 симболов (a-z чарсет). Как это сделать - в принцыпе, понимаю, но написать не получается ). Если кому не лень, покажите нормальный примерчег . Заранее благодарю.
Подскажите плз где ошибка и как дать значение static Code: #include <iostream> using namespace std; class testClass { public: static int n; void setArgv(int i) { static int n = i; } }; int main() { testClass obj; obj.setArgv(123); cout << obj.n << endl; return 0; }
Смысл static переменных надеюсь понимаешь. Так вот, static переменные класса не относятся к определенному классу, поэтому выделять память надо вне определенного класса. Code: #include <iostream> using namespace std; class testClass { public: static int n; void setArgv(int i) { static int n = i; } }; [b]int testClass::n = 0;[/b] int main() { testClass obj; obj.setArgv(123); cout << obj.n << endl; return 0; }
На C++ не пройдут такие шутки) Это на C можно такое написать. На C++ : Code: (void *(*)(void*))&print_message_function
Как вывести char *a которую я в main задал ? Code: #include <iostream> using namespace std; char *a; void getA() { cout << a << endl; } int main() { char *a[] = { "line1\n", "line2\n", NULL }; return 0; }
В твоем случае как то так: Code: #include <iostream> using namespace std; char *b; void getA() { cout << b; } int main() { char a[] = {"line1\nline2\n"}; b = a; getA(); return 0; }
В main() ты создал локальную переменную (поле). Локальную.. Локальные переменные видны только в том блоке в котором они созданы, в твоем случаи это функция main(), за предалами main() видна только глобальная char *a, которая не имеет отношения к локальной char *a[]. Ничего такого типа вывести нету, есть передача. В твоем случаи можно локальный char *a передать в функция getA() как указатель. Code: #include <iostream> using namespace std; char *a; void getA( [b]char * a[/b] ) { cout << a << endl; } int main() { [b]char a[][16] = { "line1\n","line2\n" }; getA( a[0] ); getA( a[1] );[/b] return 0; } Судя по тому, что ты написал понятно, что ты не разбираешься в локальных/глобальных переменных, и указателях. Больше ищи, и читай, тогда придеться меньше спрашивать. Google для чего? В интернете полно информации обо всем этом.
Помогите с проверкой корректности ввода целого числа. На основе проверки преобразования через cin.good с очисткой флага ошибки и повторным вводом (т.е. в цикле вайл) Был код а я его потерял и вспомнить не могу((
Code: #include <iostream> using namespace std; int a; int main() { while(true){ cout << "Введите чило: "; cin >> a; //1 if (cin.peek() == '\n'){ //2 cin.get(); //3 break; } else{ cout <<"Повторите ввод (ожидается целое число):"<<endl; cin.clear(); //4 while (cin.get() != '\n'){} //5 } } }
Вопрос по Критическим секциям Почему потоки все-равно мешаються? К примеру в файл 0.txt пишеться 0,0,0,0,1 хотя должны только нули писаться, получаеться почему-то критическая секция не сработала Code: #include <boost/thread/thread.hpp> #include <boost/lexical_cast.hpp> #include <windows.h> #include <string> #include <stdio.h> #include <iostream> #include <fstream> using namespace std; CRITICAL_SECTION cs; int ThreadsCount = 10; int a; boost::thread_group g; void writeToFile(string data) { int thread_id = a; string filename = "C:/files/" + (boost::lexical_cast<string>( thread_id )) + ".txt"; ofstream myfile (filename.c_str(), ios::app); if (myfile.is_open()) { myfile << data << endl; myfile.close(); } } void mainThread(int tid) { string data = "THREAD - " + (boost::lexical_cast<string>( tid )); for(int i=0;i<100;i++) { InitializeCriticalSection( &cs ); EnterCriticalSection( &cs ); a = tid; writeToFile(data); LeaveCriticalSection( &cs ); } } int main() { for(int i=0;i<ThreadsCount;i++) { g.create_thread( boost::bind( mainThread, i) ); } g.join_all(); return 0; }
Code: #include <boost/thread/thread.hpp> #include <boost/lexical_cast.hpp> #include <windows.h> #include <string> #include <stdio.h> #include <iostream> #include <fstream> using namespace std; CRITICAL_SECTION cs; int ThreadsCount = 10; int a; boost::thread_group g; void writeToFile(string data) { int thread_id = a; string filename = "C:/files/" + (boost::lexical_cast<string>( thread_id )) + ".txt"; ofstream myfile (filename.c_str(), ios::app); if (myfile.is_open()) { myfile << data << endl; myfile.close(); } } void mainThread(int tid) { string data = "THREAD - " + (boost::lexical_cast<string>( tid )); [b]EnterCriticalSection( &cs );[/b] for(int i=0;i<100;i++) { //----- a = tid; writeToFile(data); //----- } [b]LeaveCriticalSection( &cs );[/b] } int main() { [b] InitializeCriticalSection( &cs );[/b] for(int i=0;i<ThreadsCount;i++) { g.create_thread( boost::bind( mainThread, i) ); } g.join_all(); return 0; } В Windows синхронизацией процессов/потоков не занимался, но подозреваю, что принцип точно такой же как и в Linux, поэтому скажу - инициализация проводится только один раз, да еще глупо в цикле вызывать Enter/LeaveCriticalSection, особенно когда цикл такой короткий. Код немножко изменил, попробуй сейчас.
Зачем брать всякие EnterCriticalSection, если в бусте (который ты используешь) есть мьютексы готовые? Прочитай про boost::mutex и boost::mutex::scoped_lock - это все, что тебе надо в твоей ситуации. А еще твой подход неверен изначально - если какой-то вызов внутри критической секции бросит исключение, то она навсегда окажется заблокированной для других потоков, даже если в этом ты исключение отловишь. Именно для этого и сделали scoped_lock.
как элементы структуры: Code: struct NOTE { char Name[50]; int telephone_number[15]; int date[3]; }NOTE_object[4]; записать в файл с помощью fwrite? Пробовал по разному но после записи файл просто отказывается открываться.
Если структура создана как struct NOTE: Code: struct NOTE nt; fprintf( filedesc, "Name: %s\n" "Telephone: %d\n" "Date: %d\n", nt.Name, nt.telephone_number, nt.date ); а если как struct NOTE_object: Code: struct NOTE_object nt_obj; for (int i = 0; i < 4; i++) { fprintf( filedesc, "Name: %s\n" "Telephone: %d\n" "Date: %d\n", nt_obj[i].Name, nt_obj[i].telephone_number, nt_obj[i].date ); } update: сорри, не заметил что ты хотел имено функцию fwrite()
Даже если отловить исключение до выхода из критической секции? Например этот псевдокод: Code: mutex_lock(&m); try { write(data); } catch (error_exception & some_error) { print some_error; mutex_unlock(&m); } mutex_unlock(&m); этот код не будет правильно работать? Сейчас я тебя не подкалываю, если что, просто интересно почему такой код не будет работать), конечно если ты имел ввиду именно такой случай
поясните, как передать аргументы из сомандной строки вот в это чудо: Code: #include <stdio.h> main(int argc,char *argv[]) { int i; for(i=1;i<argc;i++) printf("%s%s",argv[i],(i<argc-1)?" ":""); printf("\n"); return 0; }