libcurl curl_easy_stopt long参数未正确传递-varg(param,long)
libcurl curl_easy_setopt long param not passed correctly - va_arg(param, long)
任何一位可能对此有所了解的libcurl专家?
我注意到这一点是因为我无法关闭libcurl VERBOSE:
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
当我通过对libcurl的调用进行跟踪时,我发现0L(long)被转换为一个非零数字,导致VERBOSE始终打开。我还没有尝试过,但我很确定任何长参数都不会正确传递。
data->set.verbose = (0 != va_arg(param, long))?TRUE:FALSE;
其中
#define va_arg _crt_va_arg
#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
但我不确定这些人在干什么
为什么会发生这种情况,以及如何解决?
我使用的是带有libcurl 7.27.0 的Visual Studio 2010 C++
va_arg()
正在使用指针算术从va_list param
中提取0L。您可以在此处或此处阅读有关va_list
类型的更多信息。将0L转换为非零数字不是。
请尝试在打开连接之前调用curl_easy_stopt()。该文档指出,您的详细设置是"为多个独立连接设置一次"(urldata.h ln 1537)。
如果您仍然不相信它有效,您可以将CURL*转换为SessionHandle*并在调试器中检查它,例如:
struct SessionHandle *data = reinterpret_cast<SessionHandle*>(curl);
// Inspect data->set.verbose
您可以在urldata.h中找到SessionHandle的定义。
相关文章:
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 对 '(const Y) (int&, std::mersenne_twister_engine<long unsigned int,
- 从 long 转换C++位集构造函数的复杂性是多少?
- 自动类型默认为 int 而不是 long
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- C++ 我应该如何解释函数参数long(*pPointer)(OtherClass *const, long)?
- 以0开头的值初始化long-long会导致奇怪的值
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- cudaMallocManaged with vector<complex<long double> > C++ - NVIDIA CUDA
- 为什么我的函数返回 long long 返回 705032704?
- C++11 模板函数"implicity"将位集<N>转换为"unsigned long"
- 替换 c++ 中的 c 样式强制转换 (long&)
- 如何在 Turbo C++ 3.2 编译器中使用 long long 关键字
- libcurl curl_easy_stopt long参数未正确传递-varg(param,long)