c++连接字符数组



我正在制作一个游戏,程序会自动广播用户在线。广播消息将由以下内容组成:
1.字节:0到6之间的值
2-5.byte:rgba颜色
6-。。。字节:用户名

前5个字节存储在char buf_begin中,而用户名存储在std::string username中。

我试过这个:

std::string buf_begin_s(buf_begin);
std::string buf = buf_begin_s + username;
sendto(udp_br, buf.c_str(), sizeof(buf.c_str()), 0, (sockaddr *)&to, sizeof(to));

问题是buf字符串不包含1-5。字节,只有用户名。

std::string buf_begin_s(buf_begin);

如果,正如您所说,buf_begin是一个5个字符的缓冲区,并且第一个字符可能是0,那么当它是0时,buf_begin_s最终会变成一个空字符串。此构造函数需要一个以''字符结尾的C样式字符串。如果buf中的第一个字符是0字节,那么这将是故事的结束。

如果缓冲区中的5个字符中没有一个是0,这将导致未定义的行为,因为构造函数在内存中查找''字节。

这可能是:

std::string buf_begin_s(buf_begin, buf_begin+5);

sendto()调用也是错误的:

sendto(udp_br, buf.c_str(), sizeof(buf.c_str()), 0, (sockaddr *)&to, sizeof(to));

由于buf.c_str()const char *,第三个参数将是sizeof(const char *),或者4或8,这取决于这是32位平台还是64位平台。无论buf中有多少,sizeof(buf.c_str())总是4或8。这显然是错误的。

这应该只是buf.size()

相关内容

  • 没有找到相关文章

最新更新