2

私は初めて cURL を使用しています。ドキュメントはかなり完成しているように見えますが、curl_easy_setopt()パラメーターに必要な有効期間がどこにあるのかわかりません。

これが私が意味することの例です:

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

curl_handleへの呼び出し後に有効ですfree()か?

strコンテンツはコピーされていますか、それとも curl によってどこかで直接参照されていますか?

4

1 に答える 1

5

公式ドキュメントから:

'char *' 引数として libcurl に渡された文字列は、ライブラリによってコピーされます。したがって、ポインター引数に関連付けられた文字列ストレージは、curl_easy_setopt() が戻った後に上書きされる可能性があります。この規則の例外は、以下のオプションの詳細で説明されています。

バージョン 7.17.0 より前では、文字列はコピーされませんでした。代わりに、libcurl がそれらを必要としなくなるまで、ユーザーはそれらを利用可能にしておくことを余儀なくされました。

そのため、最近のバージョンの libcurl を使用している場合は、設定後すぐに文字列を解放できます。

于 2012-08-13T21:02:35.323 に答える