[ 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. GRRRL Power

    GRRRL Power Moderator

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А при чем тут парсер и libcurl? Библиотека libcurl очень хорошо подходит для работы с протоколом HTTP(S), тем более для нее есть куча оберток под C++.
     
    _________________________
  2. Lazy

    Lazy New Member

    Joined:
    19 Jul 2011
    Messages:
    95
    Likes Received:
    2
    Reputations:
    3
    Ну ок . Вообще я в том смысле , что может лучше есть ?

    Парсер для сайта . Скачать странички , потом распарсить данные в sqlite хочу . Вроде все понятно .
    Насчет кучи оберток можно подробнее ?
    Есть curlpp . Инфы по нему немного , похоже пользуются нечасто . Последний релиз 2009 года . И пока он у меня даже не собрался . (И нафига вообще собирать , не могли сделать заголовочный что-ли ?)
     
  3. GRRRL Power

    GRRRL Power Moderator

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    По запросам "curl c++ wrapper" или "libcurl c++ binding" в гугле выдается много разных плюсовых оберток, хотя на сайте curl'а упомянут действительно только curlpp. Сам, когда юзал курл в плюсах, никакие обертки не брал, написал небольшую свою (пример тут, файлы web_content_loader.h/.cpp).
     
    _________________________
  4. Lazy

    Lazy New Member

    Joined:
    19 Jul 2011
    Messages:
    95
    Likes Received:
    2
    Reputations:
    3
    Да . Но . Он у тебя однопоточный . Это неактуально .
    Нужен многопоток . Хочется связать callback курла с контейнером типа map<string , string>
    чтобы на лету рассовывать страницы в <url , html_data> .
    Нужно просто передавать в гребанный коллбек iterator контейнера . Но сишный коллбек не принимает итераторов :mad:
    Не по теме . Оказывается это ты dx ? Вот бы и не подумал .
     
  5. GRRRL Power

    GRRRL Power Moderator

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Не многопоточный, да, функцию load сразу из нескольких потоков не вызвать, но можно создать по одному такому классу на каждый поток и радоваться, в таком случае работать будет. Если хочется как-то по-другому, то, вероятно, придется самому написать. А сишный коллбэк принимает void*, в который можно что угодно пихнуть так-то (например, указатель на контекст загрузки, как сделано у меня, погугли CURLOPT_PROGRESSDATA).

    И это я dx, да +)
     
    _________________________
  6. Lazy

    Lazy New Member

    Joined:
    19 Jul 2011
    Messages:
    95
    Likes Received:
    2
    Reputations:
    3
    Можно самому потоки с curl_easy наплодить . Можно передавать в коллбек что-то вроде структуры с нужными данными , выделяя через new .
    Но как бы по-идее библиотека должна облегчать задачу кодера . А не заставлять искать обходные пути для самого очевидного . А иначе получается она ненужна .
     
  7. Inten

    Inten New Member

    Joined:
    5 May 2011
    Messages:
    9
    Likes Received:
    2
    Reputations:
    0
    Code:
    int dlina (char *a){
      int dl = 0;
    
      while (*(a+dl) != 0){
      dl ++;
    }
    return dl;
    }
    Я правильно понял что с помощью dl адрес "а" увеличивается на 1 байт и когда "а" кончится вайл прекращается потому что у "а" больше нет адресов?
     
  8. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    942
    Likes Received:
    428
    Reputations:
    139
    вайл прекращается не потому что нет адресов, а потому что значение по адресу a+dl равно 0(строки заканчиваются нулем).
     
    Inten likes this.
  9. vanban

    vanban New Member

    Joined:
    4 Jul 2013
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    То же самое:
    Code:
    int dlina (char *a){
    
      for (int dl = 0; a[dl] != 0; dl++ ) {}
    
      return dl;
    }
     
    Inten likes this.
  10. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,582
    Likes Received:
    173
    Reputations:
    75
    vanban, если ваша строка не заканчивается нулем, то данный цыкл вам не поможет, для подсчёта длины есть функция strlen
     
  11. vanban

    vanban New Member

    Joined:
    4 Jul 2013
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Это понятно. Я отвечал Inten, перевел его код в более понятный ему формат.

    upd: Если строка не заканчивается нулем, то strlen() также не поможет. FYI.
     
Loading...
Thread Status:
Not open for further replies.