我试图从缓冲区构建一个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;
}
我可以在第二种情况下看到一个额外的(不可打印的)角色。
答案 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";
}