2012-08-13 58 views
2

我第一次使用cURL,虽然文档看起来相当完整,但我无法看到在哪里可以找到curl_easy_setopt()参数所需的使用寿命。什么是cURL选项参数寿命?

这里是我的意思的例子:

char* str = strdup("my user agent"); 
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, str); 
free(str); 

是调用free()curl_handle有效?

是否str内容已被复制,或者它仍然被curl直接引用?

回答

3

From the official docs:

字符串传递给libcurl的为 '字符*' 参数时,由该库复制;因此与curl_easy_setopt()返回后,可能会覆盖与指针参数关联的字符串存储。以下选项详细说明了此规则的例外情况。

在版本7.17.0之前,字符串未被复制。相反,用户被迫保持它们可用,直到libcurl不再需要它们。

因此,如果您使用最新版本的libcurl,可以在设置它之后立即释放该字符串。

+0

非常感谢您的先生。完美的答案。 – ereOn 2012-08-14 09:29:53

+0

@ereOn不用客气。 – 2012-08-14 09:40:23

+0

@ereOn也,你不需要那个strdup。 – 2012-08-14 09:41:26