2016-11-05 10 views
0

Я пытаюсь построить std :: string из буфера, но у меня есть странная проблема. Кажется, что это два кусок кода различны: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'? Что такое 'off'? Что такое 'len'? Каковы их ценности и содержание? Откуда вы знаете, что в строке есть «лишний» символ? Пожалуйста, создайте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и покажите нам. –

+0

@ dude: Я пытаюсь подготовить простой пример –

+1

@nos: да, конечно, в нулевом завершении. Но из того, что я знаю, это не проблема при копировании буфера внутри 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"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^