2010-11-18 5 views
1

に保存します。私のタイトルによれば、カール演奏の出力をベクトルに保存したいと思います。 any1は私にサンプルコードを教えてください。 私はそれをcの構造体に保存することができました。しかし私はそれをC++のベクトルに保存したいのですが、私はC++には少し不安です。カール演奏の出力をベクトル<string>のC++

vector<string> contents; 

size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream) 
{ 
int numbytes = size*nmemb; 
char lastchar = *((char *) ptr + numbytes - 1); 
*((char *) ptr + numbytes - 1) = '\0'; 
contents.push_back((char *)ptr); 
*((char *) ptr + numbytes - 1) = lastchar; // Might not be necessary. 
return size*nmemb; 
} 



int main(int argc, char *argv[]) 
{ 

vector<string>::iterator i; 

CURL* curl = curl_easy_init(); 
if(curl) 
    { 
    curl_easy_setopt(curl,CURLOPT_URL, argv[1]); 
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle_data); 
    CURLcode res = curl_easy_perform(curl); 
    curl_easy_cleanup(curl); 
    if (res == 0){ 
     for(i=contents.begin();i!=contents.end();i++) 
      cout << *i << endl; 
    }else 
     cerr << "Error: " << res << endl; 
    } 
return 0; 
} 
+0

「カール演奏」とは何ですか?それは生きていて、動揺していますか?それを食べることはできますか?それとも署名がありますか?あなたが持っているものと、呼び出す必要があるカール関数のシグネチャと、結果が得られるデータ構造を表示してみませんか?あなたの質問にはC++とcurlの知識が必要です。 C++プログラマよりもC++プログラマの方がカールを知っている人がかなり少なくなっています。 – sbi

+1

@sbi、私は本当にあなたがカールを食べたいとは思わない。一方、今年はグレープスがおいしいと聞きました。 –

+0

@sbi::P ..私が持っているスニペットを提供します..私はその働きは..ページに文字列を保存するコードを持っていると思います。それを編集してベクターに保存します。 –

答えて

1

私はカールを知らないので、セットアップコードが正しいと仮定します。だからあなたが望むのは、受け取ったデータの各ブロックの文字列を文字列のベクトルに追加するコールバック関数です。これはまた、戻ってくるデータが8ビット文字であることを前提としています。

vector<string> contents; 

size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream) 
{ 
    contents.push_back(string(static_cast<const char*>(ptr), size * nmemb)); 
    return size * nmemb; 
} 

string()への「呼び出し」は、ポインタとデータ長で初期化された文字列オブジェクトを実際に構築します。

0

は、ここでは、おそらく探しているものです:

size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream) 
{ 
    int numbytes = size*nmemb; 

    string temp(static_cast<char*>(ptr), nmemb); 

    contents.push_back(temp) 

    return size*nmemb; 
} 

私は*あなたがCURLライブラリによって渡されているptrをあなたがvoidへの書き込みをしたくないかなり確信しています。また、メモリアドレスの最後の文字を '\ 0'で上書きしてから、ベクトルにプッシュした後に元の値を戻しているように見えます。これが期待どおりに機能するかどうかはわかりません。

+0

@Ferruccio:あなたがより速いカウボーイだったので、私は+1します:) – redeye

関連する問題