2015-02-16 3 views
2

В настоящее время я работаю над программой о CURL. Я написал следующие коды, чтобы добавить пользовательский заголовок: -C++ CURL не может установить заголовок

struct curl_slist *chunk = NULL;  
chunk = curl_slist_append(chunk, "Another: yes"); 
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk); 

Вышеуказанные коды хорошо, но если я изменить коды к следующему, я обнаружил, что заголовок послан не содержит Another: yes:

void add_header(CURL *c, struct curl_slist *h){ 
    h = curl_slist_append(h, "Another: yes"); 
} 

struct curl_slist *chunk = NULL; 
add_header(curl, chunk); 
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk); 

В чем проблема в моей второй части кода?

ответ

1

Проблема заключается в том, что вы передаете указатель на chunk функции, а затем присваиваете ему другое значение. Вы сами передаете указатель копией, а это значит, что внутри функции находится h, это другой указатель, кроме chunk (да, они оба указывают на одно и то же местоположение, но это не имеет значения, поскольку вы меняете значение самого указателя, а не память, на которую он указывает). Чтобы изменить это значение, передайте указатель по ссылке:

void add_header(CURL *c, struct curl_slist *&h){ //note the *& 
    h = curl_slist_append(h, "Another: yes"); 
}