2013-10-10 43 views
1

我试图做一个非常简单的程序,申请了几页,在这里是到目前为止我的代码:为什么我不能在libcurl中使用std :: string?

string fUrl = "http://google.com/"; 

int main(int argc, char *argv[]) { 
    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if (curl) { 
     char const* chFUrl = fUrl.c_str(); 
     //char const chFUrl[] = "http://google.com/"; 
     curl_easy_setopt(curl, CURLOPT_URL, chFUrl); 
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 

     res = curl_easy_perform(curl); 
     if (res != CURLE_OK) 
      fprintf(stderr, "curl_easy_perform() failed: %s\n", 
      curl_easy_strerror(res)); 

     curl_easy_cleanup(curl); 

     cout << chFUrl << endl; 
     system("pause"); 
    } 
    return 0; 
} 

现在,我想帕萨特fUrl.c_str通知()卷曲,但没有任何反应,它只是跳过curl函数,打印url并暂停。
如果我注释掉塔尔线,并取消了“字符常量chFUrl [] ...”,一切工作只是罚款和卷曲的HTML输出响应到终端。

当我通过fUrl.c_str(运行),它不工作,没有打印上VS.控制台我对C++很少有经验,所以任何想法都是值得赞赏的。

- 编辑: 我刚刚测试此代码:

char const chFUrl[] = "http://google.com"; 
for (int i = 0; i < sizeof(chFUrl); i++) { 
    cout << chFUrl[i] << endl; 
} 

而且它的整个URL的终端输出,但是,当我使用这个:

char const* chFUrl = fUrl.c_str(); 
for (int i = 0; i < sizeof(chFUrl); i++) { 
    cout << chFUrl[i] << endl; 
} 

只输出“ http“,如果我选择chFUrl,那么就算是困难[4],我得到了”:“。

+0

你试过声明和初始化'main'里面'fUrl'? –

+0

综观[本文档](http://curl.haxx.se/libcurl/c/curl_easy_setopt.html)它说,第三个参数为'curl_easy_setopt()'“可以是一个长期的,函数指针,一个对象指针或curl_off_t“。你正在传递一个字符串。这可能是一个问题吗? –

+0

请提供**完整的**示例程序,以便我们可以重现您的结果。有关更多信息,请参阅http://SSCCE.ORG。 –

回答

0

。在你的第三个片段的一个问题。 sizeof(chFUrl)将返回sizeof指针。这是一个const char*,而不是一个const char阵列。你应该用fUrl.size()来代替它。

相关问题