首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++级联字符阵列

c++级联字符阵列
EN

Stack Overflow用户
提问于 2016-07-21 10:44:43
回答 1查看 659关注 0票数 1

我正在制作一个游戏,其中的节目自动广播用户是在线的。广播信息将由以下内容组成:

  1. 字节:从0到6的值 2-5。字节: rgba颜色 6-.字节:用户名

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

我试过这个:

代码语言:javascript
复制
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。字节,只有用户名。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 11:01:19

代码语言:javascript
复制
std::string buf_begin_s(buf_begin);

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

如果缓冲区中的5个字符中没有一个为0,则会导致未定义的行为,因为构造函数在内存中前进,寻找'\0'字节。

这可能应该是:

代码语言:javascript
复制
std::string buf_begin_s(buf_begin, buf_begin+5);

sendto()调用也是错误的:

代码语言:javascript
复制
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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38502113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档