curl_slist->next 永远不会为空,因此当循环卡住时



我正在开发一个C++库,该库使用curl执行API请求。我遇到了一个问题,我试图使用curl_slistcurl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);处理响应中返回的cookie。

它看起来像是一个链表,所以我有一个当前和下一个属性,我正在检查下一个为NULL时,我应该跳出循环,但由于某种原因,它被困在循环中,看起来像是一遍又一遍地做同样的cookie,但不知道为什么。

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++;
}

问题出在这条线上

current = cookies->next

cookies总是指向同一个事物,所以cookies->next总是指向相同的事物。所以,是的,循环将无限期地继续(假设列表中至少有2个cookie(。你想要的是:

current = current->next;

代码简化

您当前的代码还会处理第一个cookie两次,因为current直到最后才更新。一种可能的代码重排:

for (current=cookies; current; current=current->next) {
/* process cookie */
}

相关内容

最新更新