2016-11-05 153 views
0

我試圖從緩衝區生成一個std :: string,但我有一個奇怪的問題。 似乎這種兩件式的代碼是不同的:GCC 4.9 std :: string 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:肯定是不是以null結尾。但從我知道這是不是一個問題,當你在std :: string中複製一個緩衝區 –

回答

0

問題出在通常的代碼的其他部分! Infact此代碼按預期工作。

#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"; 
} 
相關問題