什么是 cURL 选项参数生命周期?

ere*_*eOn 2 c curl

我第一次使用 cURL,虽然文档看起来相当完整,但我看不到在哪里可以找到curl_easy_setopt()参数所需的生命周期。

这是我的意思的一个例子:

char* str = strdup("my user agent");
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, str);
free(str);
Run Code Online (Sandbox Code Playgroud)

curl_handle在调用后有效free()

str内容被复制或者是它仍然由卷曲的地方直接引用?

小智 5

来自官方文档:

作为 'char *' 参数传递给 libcurl 的字符串由库复制;因此,在 curl_easy_setopt() 返回后,与指针参数关联的字符串存储可能会被覆盖。此规则的例外情况在下面的选项详细信息中进行了描述。

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

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