libcurl使用writedata /和WRITEFUNCTION获取异常

时间:2013-09-02 05:35:36

标签: visual-c++ libcurl

我正在尝试将从网站返回的数据捕获到char数组中(而不是让libcurl将其写入stdout),因此我可以处理它。我得到了非法的怀疑例外。

“trailing_stop_loss.exe中0x775E8E19(ntdll.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00EBDC90。”

我正在使用MS Visual Studio Express 2012。

欢迎任何帮助。谢谢,

以下是代码:

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string> 
#include "curl.h"

using namespace std;

int main(void) {
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {

    char *webData[1000];
int i;
for (i=0; i<1000; i++) {webData[i] = "z";}

curl_easy_setopt(curl, CURLOPT_URL, "http://finance.yahoo.com /d/quotes.csv?s=GOOG&f=sd1p");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)webData);
res = curl_easy_perform(curl);
if(res != CURLE_OK)`enter code here`
       fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
else {`enter code here`
  cout << webData;
}

/* always cleanup */
curl_easy_cleanup(curl);
}
}

1 个答案:

答案 0 :(得分:0)

将CURLOPT_WRITEFUNCTION设置为NULL将使libcurl使用fwrite(),然后CURLOPT_WRITEDATA必须是要将数据写入的FILE *。

如果要直接将数据接收到内存中,还必须编写自己的写回调。 libcurl网站上有一个示例,显示了这一点:

http://curl.haxx.se/libcurl/c/getinmemory.html