gpt4 book ai didi

C++连接字符数组

转载 作者:行者123 更新时间:2023-11-30 05:25:02 25 4
gpt4 key购买 nike

我正在制作一款游戏,程序会自动广播用户在线。广播消息将由以下内容组成:
1. byte: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 最终是一个空字符串。此构造函数需要一个以 '\0' 字符结尾的 C 风格字符串。如果 buf 中的第一个字符是 0 字节,那么故事就此结束。

如果缓冲区中的 5 个字符都不为 0,则会导致未定义的行为,因为构造函数会在内存中向前推进,寻找 '\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()

关于C++连接字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com