我正在实现这个代码,但是我收到了一个错误。
http://curl.haxx.se/libcurl/c/ftpupload.html
错误出现在这段代码中。
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
curl_off_t nread;
/* in real-world cases, this would probably get this data differently
as this fread() stuff is exactly what the library already would do
by default internally */
size_t retcode = fread(ptr, size, nmemb, stream);
nread = (curl_off_t)retcode;
fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
" bytes from file\n", nread);
return retcode;
}错误是..。
IntelliSense: argument of type "void *" is incompatible with parameter of type "FILE *" 和
Error C2664: 'fread' : cannot convert parameter 4 from 'void *' to 'FILE *' 任何建议都是有用的。我不明白为什么我们要把一个void *流传递给函数。这到底是什么意思?一个指向虚空的指针?
这里叫它。
/* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);卷曲API
CURLOPT_READFUNCTION 传递一个指向与以下原型匹配的函数的指针: size_t函数( void *ptr,size_t size,size_t nmemb,void *userdata);当它需要读取数据以便将其发送到对等程序时,该函数就会被libcurl调用。指针ptr所指向的数据区域可以以最多的大小乘以nmemb字节数来填充。函数必须返回存储在该内存区域中的实际字节数。返回0将向库发出结束文件的信号,并使其停止当前传输. 如果您通过返回0“早熟”(即在服务器预期之前,就像您说要上传N个字节而上传的小于N个字节)来停止当前传输,您可能会体验到服务器“挂起”等待其他不会来的数据。 读取回调可能返回CURL_READFUNC_ABORT以立即停止当前操作,从而导致来自传输的CURLE_ABORTED_BY_CALLBACK错误代码(添加在7.12.1中) 从7.18.0开始,函数可以返回CURL_READFUNC_PAUSE,这将导致从这个连接读取暂停。更多细节请参见curl_easy_pause(3)。 Bug:在进行TFTP上载时,您必须返回回调所需的确切数据量,否则服务器端将将其视为最终数据包,并且传输将在此结束。 如果将此回调指针设置为NULL,或者根本不设置它,则将使用默认的内部读取函数。它正在使用CURLOPT_READDATA对文件* userdata集执行fread()。
我有点过火了。
发布于 2014-02-15 13:21:02
fread将FILE*作为其第四个参数,void*不匹配。假设流的参数是FILE*,然后将其传递给参数,则需要对其进行强制转换:
fread(..., (FILE*)stream);顺便说一句,reinterpret_cast在语义上更适合这个任务:
fread(..., reinterpret_cast<FILE*>(stream));void*是可转换为任何其他指针类型的泛型指针类型。
发布于 2014-02-15 13:41:41
如果您的程序是用C编写的,那么代码将是有效的,因为在C类型中,void *可以隐式转换为任何类型的指针。但是,C++不允许将隐式void *转换为任何其他类型的指针。因此,您需要显式地将类型指定为要转换void *类型的对象。
您可以使用C样式铸造或C++样式铸造。例如
size_t retcode = fread(ptr, size, nmemb, ( FILE * )stream);或
size_t retcode = fread(ptr, size, nmemb, reinterpret_cast< FILE *>( stream ));https://stackoverflow.com/questions/21797959
复制相似问题