来自const char *的GCC 4.9 std :: string

时间:2016-11-05 11:02:21

标签: c++11 gcc stdstring

我试图从缓冲区构建一个std :: string但是我有一个奇怪的问题。 似乎这两段代码是不同的:

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;
}

我可以在第二种情况下看到一个额外的(不可打印的)角色。

1 个答案:

答案 0 :(得分: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";
}