我试图从缓冲区建立一个std::字符串,但我有一个奇怪的问题。似乎这两段代码是不同的:
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;
}
我可以看到一个额外的(不可打印的)字符在第二个大小写
问题像往常一样在代码的其他部分!事实上,这段代码按预期工作。
#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";
}