0

我正在尝试将从网站返回的数据捕获到一个字符数组中(而不是让 libcurl 将其写入标准输出),以便我可以处理它。我得到一个非法的赖特例外。

“ 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);
}
}
4

1 回答 1

0

将 CURLOPT_WRITEFUNCTION 设置为 NULL 将使 libcurl 使用 fwrite() 并且 CURLOPT_WRITEDATA 必须是 FILE * 才能写入数据。

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

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

于 2013-09-02T06:14:26.003 回答