C++ c++;libCurl:发送多个字节的Post回调函数

C++ c++;libCurl:发送多个字节的Post回调函数,c++,curl,callback,byte,libcurl,C++,Curl,Callback,Byte,Libcurl,我使用Libcurl post回调从文件发送数据。该示例演示如何从回调函数以每次调用1字节的形式发送数据。 我更改了代码,以便将文件读入块中。这很好用 当前示例代码为: if(sizeleft){ *( char *)ptr = readptr[0]; readptr++; sizeleft--; return 1; } 本例以1字节的形式发送数据。 但是,假设我必须发送多个字节,我尝试将readptr每次增加两个,将sizeleft减少两个,然后一次返回两个字节 它不是这

我使用Libcurl post回调从文件发送数据。该示例演示如何从回调函数以每次调用1字节的形式发送数据。 我更改了代码,以便将文件读入块中。这很好用

当前示例代码为:

if(sizeleft){
 *( char *)ptr = readptr[0]; 
   readptr++;
   sizeleft--;
  return 1;
}
本例以1字节的形式发送数据。 但是,假设我必须发送多个字节,我尝试将
readptr每次增加两个,将sizeleft减少两个
,然后
一次返回两个字节

它不是这样工作的,数据被破坏了

如果有人能帮我,我将不胜感激。
谢谢你

很难从你的问题中分辨出你到底在做什么,预期会发生什么以及实际发生了什么。然而,看起来你走对了方向

for CURLOPT_read函数声明
size*nitems
(在本例中也称为
size*nmemb
)是可以写入
buffer
的字节数上限,函数的返回值是您写入的实际字节数。返回零意味着您已经编写了希望编写的所有内容,并且您的回调函数将不再被调用

如果函数返回的值不等于实际写入缓冲区的字节数,则可能会发生损坏

附言:类似于:

// copy as many bytes as we can, up to either:
// * The number of bytes we have remaining.
//   or
// * The space available in ptr.
size_t maxBytes = size * nmemb;
size_t numBytes = std::min (maxBytes, sizeleft);
memcpy (ptr, readptr, numBytes);
readptr += numBytes;
sizeleft -= numBytes;
return numBytes;

很难从你的问题中分辨出你到底在做什么,你预期会发生什么以及实际发生了什么。然而,看起来你走对了方向

for CURLOPT_read函数声明
size*nitems
(在本例中也称为
size*nmemb
)是可以写入
buffer
的字节数上限,函数的返回值是您写入的实际字节数。返回零意味着您已经编写了希望编写的所有内容,并且您的回调函数将不再被调用

如果函数返回的值不等于实际写入缓冲区的字节数,则可能会发生损坏

附言:类似于:

// copy as many bytes as we can, up to either:
// * The number of bytes we have remaining.
//   or
// * The space available in ptr.
size_t maxBytes = size * nmemb;
size_t numBytes = std::min (maxBytes, sizeleft);
memcpy (ptr, readptr, numBytes);
readptr += numBytes;
sizeleft -= numBytes;
return numBytes;

我对std::max(maxBytes,sizeleft)感到困惑
std::max
将返回最大maxBytes或sizeleft。如果sizeleft被返回,这意味着它将崩溃?我想它应该是
std::min
,所以min值总是大于maxbytes。如果sizeleft和maxbytes都相等,那么这也将包含为相等。是的,应该是std::min,我将编辑答案以反映这一点。谢谢你的现场!我对std::max(maxBytes,sizeleft)感到困惑
std::max
将返回最大maxBytes或sizeleft。如果sizeleft被返回,这意味着它将崩溃?我想它应该是
std::min
,所以min值总是大于maxbytes。如果sizeleft和maxbytes都相等,那么这也将包含为相等。是的,应该是std::min,我将编辑答案以反映这一点。谢谢你的现场!