2016-11-05 2 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'란 무엇입니까? '꺼짐'이란 무엇입니까? '렌 '이란 무엇입니까? 가치와 내용은 무엇입니까? 문자열에 "추가"문자가 있음을 어떻게 알 수 있습니까? [Minimal, Complete, Verifiable Example] (http://stackoverflow.com/help/mcve)을 작성하여 보내주십시오. –

+0

@dude : 간단한 예제를 준비하려고합니다. –

+1

@nos : 널 (null)로 끝나지 않았 음을 확인합니다. 하지만 내가 알기로 이것은 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"; 
} 
관련 문제