curl_slist-> next никогда не является нулевым, поэтому пока цикл застревает - PullRequest
0 голосов
/ 02 ноября 2019

Я работаю над библиотекой C ++, которая выполняет запрос API с помощью curl. У меня возникла проблема, когда я пытаюсь обработать файлы cookie, которые возвращаются в ответе с использованием curl_slist и curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);.

Похоже, это связанный список, поэтому у меня есть атрибуты current и next, и я проверяю, когда next равно NULL, я должен выйти из цикла, но по какой-то причине он застревает в цикле, похожеон делает одно и то же печенье снова и снова, но не может понять, почему.

struct curl_slist* cookies;
curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);

int i = 1;
std::vector<CookieObj> cookieObjects;
struct curl_slist* current = cookies;
if (current != NULL)
{
    string cookieString = string(current->data);
    CookieObj cookieObj = storeCookie(cookieString);
    cookieObjects.push_back(cookieObj);

    while (current->next != NULL)
    {
        string cookieString = string(current->data);
        CookieObj cookieObj = this->storeCookie(cookieString);
        cookieObjects.push_back(cookieObj);
        current = cookies->next;

        i++;
    }

1 Ответ

0 голосов
/ 02 ноября 2019

Проблема в том, что эта строка

current = cookies->next

cookies всегда указывает на одно и то же, поэтому cookies->next всегда будет указывать на одно и то же. Так что да, цикл будет продолжаться бесконечно (при условии, что в списке есть как минимум 2 куки). Вместо этого вы хотите:

current = current->next;

упрощение кода

Ваш текущий код также обрабатывает первый файл cookie дважды, поскольку текущий не обновляется до конца. Одна возможная перестановка кода:

for (current=cookies; current; current=current->next) {
   /* process cookie */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...