2017-01-28 16 views
2

asioソケットからstd :: stringにコピーしないで読み込もうとしています。 この実装はうまくいくようですが、信頼できるかどうかはわかりません。asio :: ip :: tcp :: socketからstd :: stringに直接書き込む

string read(int bytes) 
{ 
    string str; 
    str.resize(bytes); 
    char* buffer = (char*) str.data(); 
    //socket is declared as class member 
    asio::read(socket,asio::buffer(buffer,bytes)); 
    return str; 
} 
+1

あなたの質問は、「std :: string'バッファに直接書き込むことはできますか? [重複のように見える](http://stackoverflow.com/questions/25169915/is-writing-to-str0-buffer-of-a-stdstring-well-defined-behaviour-in-c11) – PaulMcKenzie

+0

あなたには何がわかりませんか? –

+0

@PaulMcKenzieええ、それは私が探していた答えはかなりでしたが、 'string.data()'と '&string [0]'は同じですか? – Freggar

答えて

2

はいそうです。しかし、それはそれを直接使用することをより多くの迅速になります。

std::string read(int bytes) 
{ 
    std::string str; 
    str.resize(bytes); 

    asio::read(socket, asio::buffer(str)); 
    return str; 
} 

あなたがCスタイルの再解釈キャストのすべての厄介なネスを避けるこの方法。 (ちなみにconstをキャストしても)

関連する問題