今更だけどCocos2d-x v2.2.5のCCHttpRequest::getResponseData()でレスポンスを受け取り、JSONに解析するコードを書いてたんだけど、JSON文字列の末尾に変な文字列が付加されてしまう。これは前述のメソッドがレスポンスボディ終端にNULL文字を付加しないためらしい。
void HelloWorld::sendReqeust()
{
    std::string url = "http://example.com/path/to/api";
    
    CCHttpRequest *request = new CCHttpRequest();
    request->setUrl(url.c_str());
    request->setRequestType(CCHttpRequest::kHttpGet);
    request->setResponseCallback(this, httpresponse_selector(HellowWorld::requestHandler));
    
    CCHttpClient *client = CCHttpClient::getInstance();
    client->send(request);
    request->release();
}
void HelloWorld::requestHandler(CCHttpClient *sender, CCHttpResponse *response)
{
    int responseCode = response->getResponseCode();
    if ( responseCode != 200 )
    {
        CCLOG("Request Error: Code: %d", responseCode);
        return;
    }
    // レスポンス取得
    std::vector<char> *buffer = response->getResponseData();
    
    // 手動で終端NULL文字を追加するとうまくいく(これはつらい)
    buffer->push_back('\0');
    
    CCLOG("Response string: %s", &(*buffer)[0]);
    
    // parse json
    rapidjson::Document json;
    json<rapidjson::kParseDefaultFlags>(&(*buffer)[0]);
    if ( settings.HasParseError() )
    {
        CCLOG("JSON Parse Error");
        return;
    }
    ….
}
3系では起こらないみたいだけど、何かの役に立つかもしれないのでメモ。
追記と理由
終端文字列を付加しないのは、画像のレスポンスを考慮してのことかもしれない、らしい。
なのでこれはこれで正しい実装なのかもしれない
または、
std::string(buffer->begin(), buffer->end());
とすればうまくいくみたい。
