c++ - 我的缓冲区包含元素,但未被打印

标签 c++ messaging sizeof

抱歉翻开我的上一篇文章,太晚了 =S 但基本上我在发送我创建的缓冲区时遇到了问题。只需要知道我哪里出错了 =( 或者是否有更好的方法。

-------客户端发送用户名--------

int bufferSize = 32;


char messageBuffer[bufferSize];


char* message;


if (userName.size() > 8)
{
    cout << "Invalid username : Greater than 8 characters" << endl;
}
else
{
    switch(regType)
    {
        case(REGISTER):
        {
            cout << "Registered name: " << userName << endl;
            messageBuffer[0] = 1;
            messageBuffer[1] = 0;
            for (int i = 2; i < (userName.size() + 2); i++)
            {
                messageBuffer[i] = userName[(i - 2)];
            }

            for (int i = 0; i < (userName.size() + 2); i++)
            {
                cout << messageBuffer[i];
            }
            cout << "<<<< messageBuffer " << endl;

            message = &messageBuffer[0];
            cout << messageBuffer << endl;
            //message[(userName.size() + 2)] = '\0';
            int messageLen = userName.size() + 2;
            if (send(sock, messageBuffer, messageLen, 0) != messageLen)
                DieWithError("send() send an invalid name");



        }break;
        case(UNREGISTER):
        {
        }break;
    }

}

------------ 服务器(接收方)------------ char msgRcvBuffer[RCVBUFSIZE];

int recvMsgSize;

if ((recvMsgSize = recv(clntSocket, msgRcvBuffer, RCVBUFSIZE, 0)) < 0) DieWithError("recv() 失败");

msgRcvBuffer[recvMsgSize] = '\0';

string msgType( msgRcvBuffer );

cout << "消息类型"<< msgType << endl; <<<<<<打印时不显示任何内容

void handleReg(string message, int socket, string ipAddr) {

// Remove the Prefix
int startIndex = 2;
// Get the username from the message

string userName = message.substr(startIndex, message.size() - startIndex);
cout << "Username " << userName << endl;

出于某种原因,我的消息字符串只是 1... =S 我想要做的只是从客户端发送的消息中获取消息。我只是想从缓冲区的开头删除“1”和“0”。 1 和 0 不是字符。

非常感谢大家的帮助 =)

最佳答案

char*string 的转换将字符串视为以 null 结尾。这似乎不是这里的情况——特别是,您的 char 数组似乎包含 0 个字符,因此字符串将在该位置被截断。

为了避免这种情况,您需要将字符的有效 范围 传递给 string 构造函数,而不仅仅是开始指针:

msgType = string(msgRcvBuffer, msgRcvBuffer + recvMsgSize);

关于c++ - 我的缓冲区包含元素,但未被打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695999/

相关文章:

C++ 重载 '--' 后缀运算符

c++ - 引用指向 const 作为函数参数的指针

Oracle 高级排队体验

c# - 以编程方式从 Twilio 中删除消息传递 Webhook

c - 为什么 sizeof (void(*)(void)) 打印 8?

c - sizeof 在编译时工作吗?

c++ - 在 C++ 中插入一个 Trie

c++ - "safe"在C++的消息系统设计中如何使用void指针?

c - MVC 中奇怪的 sizeof 结果(对齐?)

c++ - 使用 OpenGL 绘制点数组