2011-10-04 92 views
-1

我有从网页上下载汇率的python脚本,我想从中创建C++程序,这里是我到目前为止:错误:无法在初始化时将'std :: string'转换为'char *'

include iostream 
include time.h 
include stdio.h 
include curl/curl.h 
include curl/easy.h 
include string 
define CURL_STATICLIB 

using namespace std; 

void dat(string &d){ 
    time_t rawtime; 
    struct tm * timeinfo; 
    char datum[80]; 
    time (&rawtime); 
    timeinfo=localtime(&rawtime); 
    strftime(datum,80,"%d%m%y",timeinfo); 
    d=datum; 
} 

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { 
    size_t written; 
    written = fwrite(ptr, size, nmemb, stream); 
    return written; 
} 


int main() 
{ 
    string f; 
    dat(f); 
    string l1="http://www.hnb.hr/tecajn/f"; 
    string l2=".dat"; 
    string linkz=l1+f+l2; 
    cout << linkz; 

    CURL *curl; 
    FILE *fp; 
    CURLcode res; 
    char *url = linkz; 
    char outfilename[FILENAME_MAX] = "/home/tomi/data.txt"; 
    curl = curl_easy_init(); 
    if (curl) { 
     fp = fopen(outfilename,"wb"); 
     curl_easy_setopt(curl, CURLOPT_URL, url); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); 
     res = curl_easy_perform(curl); 
     curl_easy_cleanup(curl); 
     fclose(fp); 


    return 0; 
} 

它给我这个错误,当我尝试编译,我发现用于下载TXT algorythm,所以我希望它是正确的

+1

你好,@Tomislav。欢迎来到Stack Overflow。作为回答你的问题的人的礼貌,请**粘贴**正在编译的**精确**代码(不要重新键入它,而是复制粘贴它)。同时粘贴您看到的确切错误消息。在这个程序的情况下,有很多错误 - 它当然不是完全相同的程序,你试图编译。 –

回答

6

如果你曾经指出,你得到了错误的路线,我不必把它追踪到:

string linkz=l1+f+l2; 
... 
char *url = linkz; 

您可以使用c_str()获取指向字符串中常量字符的指针。因此,这将做到:

char const* url = linkz.c_str(); 

你可以有在setopt调用同样的线路,或有urlstd::string为好。

6

char *url = linkz;应该是const char* url = linkz.c_str();假设你真的需要一个C风格的字符串的API原因。

3

的问题是在这条线:

char *url = linkz; 

“链接” 是的std :: string,但 “URL” 是一个char *。尝试使用字符串的c_str方法来得到你需要的那样:

const char * url = links.c_str(); 
相关问题