我正在尝试将从网站返回的数据捕获到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);
}
}
答案 0 :(得分:0)
将CURLOPT_WRITEFUNCTION设置为NULL将使libcurl使用fwrite(),然后CURLOPT_WRITEDATA必须是要将数据写入的FILE *。
如果要直接将数据接收到内存中,还必须编写自己的写回调。 libcurl网站上有一个示例,显示了这一点: