[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    c++ (vs2010)

    Вопрос: как реализовать алгоритм брутфорса ? Т.е. необходимо найти ключ из 6 симболов (a-z чарсет). Как это сделать - в принцыпе, понимаю, но написать не получается ). Если кому не лень, покажите нормальный примерчег :).


    Заранее благодарю.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    http://www.insidepro.com/doc/003r.shtml
     
    _________________________
    1 person likes this.
  3. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Подскажите плз где ошибка и как дать значение 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;
    }
    
     
  4. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8

    Смысл 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;
    }
    
     
  5. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    На C++ не пройдут такие шутки) Это на C можно такое написать. На C++ :
    Code:
    (void *(*)(void*))&print_message_function
     
    #7005 R0nin, 21 Feb 2012
    Last edited: 21 Feb 2012
    1 person likes this.
  6. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Как вывести 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;
    }
    
     
  7. NetAng

    NetAng Member

    Joined:
    29 Dec 2010
    Messages:
    75
    Likes Received:
    12
    Reputations:
    5
    В твоем случае как то так:
    Code:
    #include <iostream>
    using namespace std;
    char *b;
    void getA()
    {
       cout << b;
    }
    int main()
    {
           char a[] = {"line1\nline2\n"};
            b = a;
           getA();
    	return 0;
    }
     
    1 person likes this.
  8. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8

    В 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 для чего? В интернете полно информации обо всем этом.
     
    #7008 R0nin, 22 Feb 2012
    Last edited: 22 Feb 2012
    1 person likes this.
  9. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Помогите с проверкой корректности ввода целого числа. На основе проверки преобразования через cin.good с очисткой флага ошибки и повторным вводом (т.е. в цикле вайл)

    Был код а я его потерял и вспомнить не могу((
     
    1 person likes this.
  10. NetAng

    NetAng Member

    Joined:
    29 Dec 2010
    Messages:
    75
    Likes Received:
    12
    Reputations:
    5
    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
                }
            }
    }
     
  11. zdravstvyi

    zdravstvyi Banned

    Joined:
    14 Feb 2012
    Messages:
    7
    Likes Received:
    1
    Reputations:
    0
    С праздником Вас,Уважаемые!
    Спасибо за помощь, терпение, подсказки.
    Благодарствую.
     
  12. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Вопрос по Критическим секциям
    Почему потоки все-равно мешаються? К примеру в файл 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;
    }
    
     
  13. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8

    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, особенно когда цикл такой короткий. Код немножко изменил, попробуй сейчас.
     
    #7013 R0nin, 24 Feb 2012
    Last edited: 24 Feb 2012
  14. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Зачем брать всякие EnterCriticalSection, если в бусте (который ты используешь) есть мьютексы готовые?
    Прочитай про boost::mutex и boost::mutex::scoped_lock - это все, что тебе надо в твоей ситуации.

    А еще твой подход неверен изначально - если какой-то вызов внутри критической секции бросит исключение, то она навсегда окажется заблокированной для других потоков, даже если в этом ты исключение отловишь. Именно для этого и сделали scoped_lock.
     
    1 person likes this.
  15. NetAng

    NetAng Member

    Joined:
    29 Dec 2010
    Messages:
    75
    Likes Received:
    12
    Reputations:
    5
    как элементы структуры:
    Code:
    struct NOTE
    {
    	char Name[50];
    	int telephone_number[15];
    	int date[3];
    }NOTE_object[4];
    записать в файл с помощью fwrite? Пробовал по разному но после записи файл просто отказывается открываться.
     
  16. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Если структура создана как 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()
     
    1 person likes this.
  17. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Даже если отловить исключение до выхода из критической секции? :)

    Например этот псевдокод:
    Code:
    mutex_lock(&m);
    try {
    	write(data);
    } catch (error_exception & some_error) {
    	print some_error;
    	mutex_unlock(&m);
    }
    mutex_unlock(&m);
    этот код не будет правильно работать? Сейчас я тебя не подкалываю, если что, просто интересно почему такой код не будет работать), конечно если ты имел ввиду именно такой случай
     
  18. XikarO

    XikarO Member

    Joined:
    20 May 2009
    Messages:
    16
    Likes Received:
    24
    Reputations:
    18
    поясните, как передать аргументы из сомандной строки вот в это чудо:
    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; }
     
    #7018 XikarO, 24 Feb 2012
    Last edited: 24 Feb 2012
  19. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    а это что по твоему?) Там и передаются аргументы из командной строки.
     
  20. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    program.exe par1 par2 par3
     
Thread Status:
Not open for further replies.