2016-11-05 24 views
0

私はバッファからstd :: stringを構築しようとしていますが、私は奇妙な問題があります。 は、コードのこの2点の作品が異なっているようだ:GCC 4.9 std :: string from const char *

std::string myfun() 
{ 
    .... 
    std::string rv{}; 
    if (....) 
    { 
     char ibuff[256]; 
     memcpy(ibuff, m_buffer + off - 28, len); 
     ibuff[len] = 0; 
     rv.assign(ibuff); 
    } 
    ... 
    return rv; 
} 

std::string myfun() 
{ 
    .... 
    std::string rv{}; 
    if (....) 
    { 
     rv.assign(m_buffer + off - 28, len); 
    } 
    ... 
    return rv; 
} 

私は後者の場合に余分な(印刷不可能)文字を見ることができますよ。

+0

「m_buffer」とは何ですか? 「オフ」とは何ですか? 'len'とは何ですか?その価値と内容は何ですか?文字列に "余分な"文字があることをどうやって知っていますか? [最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

+0

@dude:私は単純な例を用意しようとしています –

+1

@nos:はい、ヌルで終わらないことを確認してください。しかし、私が知っていることは、std :: stringの中にバッファをコピーするときには問題ではないということです。 –

答えて

0

問題はコードの他の部分でも通常通りでした! このコードは実際には正常に動作します。

#include <iostream> 

int main() 
{ 
    char buff[512]; 
    std::string rv{}; 

    for (size_t i = 0; i < 512; i++) 
     buff[i] = i & 0xef; 


    buff[179] = 'X'; 
    buff[180] = 'Y'; 
    buff[181] = 'Z'; 
    buff[182] = '.'; 

    uint16_t off = 179; 
    uint16_t len = 4; 

    rv.assign(buff + off, len); 
    std::cout << "[[[" << rv << "]]]\n"; 
} 
関連する問題